@khanacademy/perseus-core 3.7.0 → 4.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.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/utils/add-library-version-to-perseus-debug.ts","../../../node_modules/underscore/modules/_setup.js","../../../node_modules/underscore/modules/restArguments.js","../../../node_modules/underscore/modules/isObject.js","../../../node_modules/underscore/modules/isNull.js","../../../node_modules/underscore/modules/isUndefined.js","../../../node_modules/underscore/modules/isBoolean.js","../../../node_modules/underscore/modules/isElement.js","../../../node_modules/underscore/modules/_tagTester.js","../../../node_modules/underscore/modules/isString.js","../../../node_modules/underscore/modules/isNumber.js","../../../node_modules/underscore/modules/isDate.js","../../../node_modules/underscore/modules/isRegExp.js","../../../node_modules/underscore/modules/isError.js","../../../node_modules/underscore/modules/isSymbol.js","../../../node_modules/underscore/modules/isArrayBuffer.js","../../../node_modules/underscore/modules/isFunction.js","../../../node_modules/underscore/modules/_hasObjectTag.js","../../../node_modules/underscore/modules/_stringTagBug.js","../../../node_modules/underscore/modules/isDataView.js","../../../node_modules/underscore/modules/isArray.js","../../../node_modules/underscore/modules/_has.js","../../../node_modules/underscore/modules/isArguments.js","../../../node_modules/underscore/modules/isFinite.js","../../../node_modules/underscore/modules/isNaN.js","../../../node_modules/underscore/modules/constant.js","../../../node_modules/underscore/modules/_createSizePropertyCheck.js","../../../node_modules/underscore/modules/_shallowProperty.js","../../../node_modules/underscore/modules/_getByteLength.js","../../../node_modules/underscore/modules/_isBufferLike.js","../../../node_modules/underscore/modules/isTypedArray.js","../../../node_modules/underscore/modules/_getLength.js","../../../node_modules/underscore/modules/_collectNonEnumProps.js","../../../node_modules/underscore/modules/keys.js","../../../node_modules/underscore/modules/isEmpty.js","../../../node_modules/underscore/modules/isMatch.js","../../../node_modules/underscore/modules/underscore.js","../../../node_modules/underscore/modules/_toBufferView.js","../../../node_modules/underscore/modules/isEqual.js","../../../node_modules/underscore/modules/allKeys.js","../../../node_modules/underscore/modules/_methodFingerprint.js","../../../node_modules/underscore/modules/isMap.js","../../../node_modules/underscore/modules/isWeakMap.js","../../../node_modules/underscore/modules/isSet.js","../../../node_modules/underscore/modules/isWeakSet.js","../../../node_modules/underscore/modules/values.js","../../../node_modules/underscore/modules/pairs.js","../../../node_modules/underscore/modules/invert.js","../../../node_modules/underscore/modules/functions.js","../../../node_modules/underscore/modules/_createAssigner.js","../../../node_modules/underscore/modules/extend.js","../../../node_modules/underscore/modules/extendOwn.js","../../../node_modules/underscore/modules/defaults.js","../../../node_modules/underscore/modules/_baseCreate.js","../../../node_modules/underscore/modules/create.js","../../../node_modules/underscore/modules/clone.js","../../../node_modules/underscore/modules/tap.js","../../../node_modules/underscore/modules/toPath.js","../../../node_modules/underscore/modules/_toPath.js","../../../node_modules/underscore/modules/_deepGet.js","../../../node_modules/underscore/modules/get.js","../../../node_modules/underscore/modules/has.js","../../../node_modules/underscore/modules/identity.js","../../../node_modules/underscore/modules/matcher.js","../../../node_modules/underscore/modules/property.js","../../../node_modules/underscore/modules/_optimizeCb.js","../../../node_modules/underscore/modules/_baseIteratee.js","../../../node_modules/underscore/modules/iteratee.js","../../../node_modules/underscore/modules/_cb.js","../../../node_modules/underscore/modules/mapObject.js","../../../node_modules/underscore/modules/noop.js","../../../node_modules/underscore/modules/propertyOf.js","../../../node_modules/underscore/modules/times.js","../../../node_modules/underscore/modules/random.js","../../../node_modules/underscore/modules/now.js","../../../node_modules/underscore/modules/_createEscaper.js","../../../node_modules/underscore/modules/_escapeMap.js","../../../node_modules/underscore/modules/escape.js","../../../node_modules/underscore/modules/_unescapeMap.js","../../../node_modules/underscore/modules/unescape.js","../../../node_modules/underscore/modules/templateSettings.js","../../../node_modules/underscore/modules/template.js","../../../node_modules/underscore/modules/result.js","../../../node_modules/underscore/modules/uniqueId.js","../../../node_modules/underscore/modules/chain.js","../../../node_modules/underscore/modules/_executeBound.js","../../../node_modules/underscore/modules/partial.js","../../../node_modules/underscore/modules/bind.js","../../../node_modules/underscore/modules/_isArrayLike.js","../../../node_modules/underscore/modules/_flatten.js","../../../node_modules/underscore/modules/bindAll.js","../../../node_modules/underscore/modules/memoize.js","../../../node_modules/underscore/modules/delay.js","../../../node_modules/underscore/modules/defer.js","../../../node_modules/underscore/modules/throttle.js","../../../node_modules/underscore/modules/debounce.js","../../../node_modules/underscore/modules/wrap.js","../../../node_modules/underscore/modules/negate.js","../../../node_modules/underscore/modules/compose.js","../../../node_modules/underscore/modules/after.js","../../../node_modules/underscore/modules/before.js","../../../node_modules/underscore/modules/once.js","../../../node_modules/underscore/modules/findKey.js","../../../node_modules/underscore/modules/_createPredicateIndexFinder.js","../../../node_modules/underscore/modules/findIndex.js","../../../node_modules/underscore/modules/findLastIndex.js","../../../node_modules/underscore/modules/sortedIndex.js","../../../node_modules/underscore/modules/_createIndexFinder.js","../../../node_modules/underscore/modules/indexOf.js","../../../node_modules/underscore/modules/lastIndexOf.js","../../../node_modules/underscore/modules/find.js","../../../node_modules/underscore/modules/findWhere.js","../../../node_modules/underscore/modules/each.js","../../../node_modules/underscore/modules/map.js","../../../node_modules/underscore/modules/_createReduce.js","../../../node_modules/underscore/modules/reduce.js","../../../node_modules/underscore/modules/reduceRight.js","../../../node_modules/underscore/modules/filter.js","../../../node_modules/underscore/modules/reject.js","../../../node_modules/underscore/modules/every.js","../../../node_modules/underscore/modules/some.js","../../../node_modules/underscore/modules/contains.js","../../../node_modules/underscore/modules/invoke.js","../../../node_modules/underscore/modules/pluck.js","../../../node_modules/underscore/modules/where.js","../../../node_modules/underscore/modules/max.js","../../../node_modules/underscore/modules/min.js","../../../node_modules/underscore/modules/toArray.js","../../../node_modules/underscore/modules/sample.js","../../../node_modules/underscore/modules/shuffle.js","../../../node_modules/underscore/modules/sortBy.js","../../../node_modules/underscore/modules/_group.js","../../../node_modules/underscore/modules/groupBy.js","../../../node_modules/underscore/modules/indexBy.js","../../../node_modules/underscore/modules/countBy.js","../../../node_modules/underscore/modules/partition.js","../../../node_modules/underscore/modules/size.js","../../../node_modules/underscore/modules/_keyInObj.js","../../../node_modules/underscore/modules/pick.js","../../../node_modules/underscore/modules/omit.js","../../../node_modules/underscore/modules/initial.js","../../../node_modules/underscore/modules/first.js","../../../node_modules/underscore/modules/rest.js","../../../node_modules/underscore/modules/last.js","../../../node_modules/underscore/modules/compact.js","../../../node_modules/underscore/modules/flatten.js","../../../node_modules/underscore/modules/difference.js","../../../node_modules/underscore/modules/without.js","../../../node_modules/underscore/modules/uniq.js","../../../node_modules/underscore/modules/union.js","../../../node_modules/underscore/modules/intersection.js","../../../node_modules/underscore/modules/unzip.js","../../../node_modules/underscore/modules/zip.js","../../../node_modules/underscore/modules/object.js","../../../node_modules/underscore/modules/range.js","../../../node_modules/underscore/modules/chunk.js","../../../node_modules/underscore/modules/_chainResult.js","../../../node_modules/underscore/modules/mixin.js","../../../node_modules/underscore/modules/underscore-array-methods.js","../../../node_modules/underscore/modules/index.js","../../../node_modules/underscore/modules/index-default.js","../src/utils/get-matrix-size.ts","../src/utils/get-decimal-separator.ts","../src/utils/equality.ts","../src/utils/widget-id-utils.ts","../src/utils/deep-clone.ts","../src/utils/grapher-util.ts","../src/utils/is-real-json-parse.ts","../../../node_modules/tiny-invariant/dist/esm/tiny-invariant.js","../src/parse-perseus-json/result.ts","../src/parse-perseus-json/error-tracking-parse-context.ts","../src/parse-perseus-json/object-path.ts","../src/parse-perseus-json/parse-failure-detail.ts","../src/parse-perseus-json/parse.ts","../src/parse-perseus-json/general-purpose-parsers/any.ts","../src/parse-perseus-json/general-purpose-parsers/array.ts","../src/parse-perseus-json/general-purpose-parsers/boolean.ts","../src/parse-perseus-json/general-purpose-parsers/constant.ts","../src/parse-perseus-json/general-purpose-parsers/enumeration.ts","../src/parse-perseus-json/general-purpose-parsers/is-object.ts","../src/parse-perseus-json/general-purpose-parsers/nullable.ts","../src/parse-perseus-json/general-purpose-parsers/number.ts","../src/parse-perseus-json/general-purpose-parsers/object.ts","../src/parse-perseus-json/general-purpose-parsers/optional.ts","../src/parse-perseus-json/general-purpose-parsers/pair.ts","../src/parse-perseus-json/general-purpose-parsers/pipe-parsers.ts","../src/parse-perseus-json/general-purpose-parsers/record.ts","../src/parse-perseus-json/general-purpose-parsers/string.ts","../src/parse-perseus-json/general-purpose-parsers/trio.ts","../src/parse-perseus-json/general-purpose-parsers/union.ts","../src/parse-perseus-json/general-purpose-parsers/defaulted.ts","../src/parse-perseus-json/perseus-parsers/images-map.ts","../src/parse-perseus-json/perseus-parsers/widget.ts","../src/parse-perseus-json/perseus-parsers/categorizer-widget.ts","../src/parse-perseus-json/perseus-parsers/cs-program-widget.ts","../src/parse-perseus-json/perseus-parsers/definition-widget.ts","../src/parse-perseus-json/perseus-parsers/dropdown-widget.ts","../src/parse-perseus-json/perseus-parsers/explanation-widget.ts","../src/parse-perseus-json/general-purpose-parsers/convert.ts","../src/parse-perseus-json/perseus-parsers/legacy-button-sets.ts","../src/parse-perseus-json/perseus-parsers/versioned-widget-options.ts","../src/parse-perseus-json/perseus-parsers/expression-widget.ts","../src/parse-perseus-json/perseus-parsers/graded-group-widget.ts","../src/parse-perseus-json/perseus-parsers/graded-group-set-widget.ts","../src/parse-perseus-json/general-purpose-parsers/discriminated-union.ts","../src/parse-perseus-json/perseus-parsers/grapher-widget.ts","../src/parse-perseus-json/perseus-parsers/group-widget.ts","../src/parse-perseus-json/perseus-parsers/iframe-widget.ts","../src/parse-perseus-json/general-purpose-parsers/string-to-number.ts","../src/parse-perseus-json/perseus-parsers/perseus-image-background.ts","../src/parse-perseus-json/perseus-parsers/image-widget.ts","../src/parse-perseus-json/perseus-parsers/input-number-widget.ts","../src/parse-perseus-json/perseus-parsers/interaction-widget.ts","../src/data-schema.ts","../src/parse-perseus-json/perseus-parsers/interactive-graph-widget.ts","../src/parse-perseus-json/perseus-parsers/label-image-widget.ts","../src/parse-perseus-json/perseus-parsers/matcher-widget.ts","../src/parse-perseus-json/perseus-parsers/matrix-widget.ts","../src/parse-perseus-json/perseus-parsers/measurer-widget.ts","../src/parse-perseus-json/perseus-parsers/molecule-renderer-widget.ts","../src/parse-perseus-json/perseus-parsers/number-line-widget.ts","../src/parse-perseus-json/perseus-parsers/numeric-input-widget.ts","../src/parse-perseus-json/perseus-parsers/orderer-widget.ts","../src/parse-perseus-json/perseus-parsers/passage-ref-widget.ts","../src/parse-perseus-json/perseus-parsers/passage-widget.ts","../src/parse-perseus-json/perseus-parsers/phet-simulation-widget.ts","../src/parse-perseus-json/perseus-parsers/plotter-widget.ts","../src/parse-perseus-json/perseus-parsers/python-program-widget.ts","../src/parse-perseus-json/perseus-parsers/radio-widget.ts","../src/parse-perseus-json/perseus-parsers/sorter-widget.ts","../src/parse-perseus-json/perseus-parsers/table-widget.ts","../src/parse-perseus-json/perseus-parsers/video-widget.ts","../src/parse-perseus-json/perseus-parsers/widgets-map.ts","../src/parse-perseus-json/perseus-parsers/perseus-renderer.ts","../src/parse-perseus-json/perseus-parsers/perseus-article.ts","../src/parse-perseus-json/perseus-parsers/hint.ts","../src/parse-perseus-json/perseus-parsers/perseus-answer-area.ts","../src/parse-perseus-json/perseus-parsers/perseus-item.ts","../src/parse-perseus-json/index.ts","../src/version.ts","../src/error/errors.ts","../src/error/perseus-error.ts","../src/utils/objective_.ts","../src/widgets/categorizer/categorizer-util.ts","../src/widgets/categorizer/index.ts","../src/widgets/cs-program/cs-program-util.ts","../src/widgets/cs-program/index.ts","../src/widgets/definition/index.ts","../src/widgets/dropdown/dropdown-util.ts","../src/widgets/dropdown/index.ts","../src/widgets/explanation/index.ts","../src/widgets/expression/expression-upgrade.ts","../src/widgets/expression/expression-util.ts","../src/widgets/expression/index.ts","../src/widgets/graded-group/index.ts","../src/widgets/graded-group-set/index.ts","../src/widgets/grapher/grapher-util.ts","../src/widgets/grapher/index.ts","../src/widgets/group/index.ts","../src/widgets/iframe/iframe-util.ts","../src/widgets/iframe/index.ts","../src/widgets/image/index.ts","../src/widgets/input-number/index.ts","../src/widgets/interaction/index.ts","../src/widgets/interactive-graph/interactive-graph-util.ts","../src/widgets/interactive-graph/index.ts","../src/widgets/label-image/label-image-util.ts","../src/widgets/label-image/index.ts","../src/widgets/matcher/matcher-util.ts","../src/widgets/matcher/index.ts","../src/widgets/matrix/matrix-util.ts","../src/widgets/matrix/index.ts","../src/widgets/measurer/measurer-upgrade.ts","../src/widgets/measurer/index.ts","../src/widgets/number-line/number-line-util.ts","../src/widgets/number-line/index.ts","../src/widgets/numeric-input/numeric-input-util.ts","../src/widgets/numeric-input/index.ts","../src/widgets/orderer/orderer-util.ts","../src/widgets/orderer/index.ts","../src/widgets/passage/index.ts","../src/widgets/passage-ref/passage-ref-upgrade.ts","../src/widgets/passage-ref/index.ts","../src/widgets/passage-ref-target/index.ts","../src/widgets/phet-simulation/index.ts","../src/widgets/plotter/plotter-util.ts","../src/widgets/plotter/index.ts","../src/widgets/python-program/index.ts","../src/widgets/radio/radio-upgrade.ts","../src/widgets/radio/radio-util.ts","../src/widgets/radio/index.ts","../src/widgets/sorter/sorter-util.ts","../src/widgets/sorter/index.ts","../src/widgets/table/table-util.ts","../src/widgets/table/index.ts","../src/widgets/video/index.ts","../src/widgets/core-widget-registry.ts","../src/widgets/upgrade.ts","../src/utils/split-perseus-item.ts","../src/utils/random-util.ts"],"sourcesContent":["/**\n * Adds the given perseus library version information to the __perseus_debug__\n * object and ensures that the object is attached to `globalThis` (`window` in\n * browser environments).\n *\n * This allows each library to provide runtime version information to assist in\n * debugging in production environments.\n */\nexport const addLibraryVersionToPerseusDebug = (\n libraryName: string,\n libraryVersion: string,\n) => {\n // If the library version is the default value, then we don't want to\n // prefix it with a \"v\" to indicate that it is a version number.\n let prefix = \"v\";\n if (libraryVersion === \"__lib_version__\") {\n prefix = \"\";\n }\n const formattedVersion = `${prefix}${libraryVersion}`;\n\n if (typeof globalThis !== \"undefined\") {\n globalThis.__perseus_debug__ = globalThis.__perseus_debug__ ?? {};\n\n const existingVersionEntry = globalThis.__perseus_debug__[libraryName];\n if (existingVersionEntry) {\n // If we already have an entry and it doesn't match the registered\n // version, we morph the entry into an array and log a warning.\n if (existingVersionEntry !== formattedVersion) {\n // Existing entry might be an array already (oops, at least 2\n // versions of the library already loaded!).\n const allVersions = Array.isArray(existingVersionEntry)\n ? existingVersionEntry\n : [existingVersionEntry];\n allVersions.push(formattedVersion);\n\n globalThis.__perseus_debug__[libraryName] = allVersions;\n\n // eslint-disable-next-line no-console\n console.warn(\n `Multiple versions of ${libraryName} loaded on this page: ${allVersions\n .sort()\n .join(\", \")}`,\n );\n }\n } else {\n globalThis.__perseus_debug__[libraryName] = formattedVersion;\n }\n } else {\n // eslint-disable-next-line no-console\n console.warn(`globalThis not found found (${formattedVersion})`);\n }\n};\n","// Current version.\nexport var VERSION = '1.13.3';\n\n// Establish the root object, `window` (`self`) in the browser, `global`\n// on the server, or `this` in some virtual machines. We use `self`\n// instead of `window` for `WebWorker` support.\nexport var root = (typeof self == 'object' && self.self === self && self) ||\n (typeof global == 'object' && global.global === global && global) ||\n Function('return this')() ||\n {};\n\n// Save bytes in the minified (but not gzipped) version:\nexport var ArrayProto = Array.prototype, ObjProto = Object.prototype;\nexport var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;\n\n// Create quick reference variables for speed access to core prototypes.\nexport var push = ArrayProto.push,\n slice = ArrayProto.slice,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty;\n\n// Modern feature detection.\nexport var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined',\n supportsDataView = typeof DataView !== 'undefined';\n\n// All **ECMAScript 5+** native function implementations that we hope to use\n// are declared here.\nexport var nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\n nativeCreate = Object.create,\n nativeIsView = supportsArrayBuffer && ArrayBuffer.isView;\n\n// Create references to these builtin functions because we override them.\nexport var _isNaN = isNaN,\n _isFinite = isFinite;\n\n// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\nexport var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\nexport var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n// The largest integer that can be represented exactly.\nexport var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n","// Some functions take a variable number of arguments, or a few expected\n// arguments at the beginning and then a variable number of values to operate\n// on. This helper accumulates all remaining arguments past the function’s\n// argument length (or an explicit `startIndex`), into an array that becomes\n// the last argument. Similar to ES6’s \"rest parameter\".\nexport default function restArguments(func, startIndex) {\n startIndex = startIndex == null ? func.length - 1 : +startIndex;\n return function() {\n var length = Math.max(arguments.length - startIndex, 0),\n rest = Array(length),\n index = 0;\n for (; index < length; index++) {\n rest[index] = arguments[index + startIndex];\n }\n switch (startIndex) {\n case 0: return func.call(this, rest);\n case 1: return func.call(this, arguments[0], rest);\n case 2: return func.call(this, arguments[0], arguments[1], rest);\n }\n var args = Array(startIndex + 1);\n for (index = 0; index < startIndex; index++) {\n args[index] = arguments[index];\n }\n args[startIndex] = rest;\n return func.apply(this, args);\n };\n}\n","// Is a given variable an object?\nexport default function isObject(obj) {\n var type = typeof obj;\n return type === 'function' || (type === 'object' && !!obj);\n}\n","// Is a given value equal to null?\nexport default function isNull(obj) {\n return obj === null;\n}\n","// Is a given variable undefined?\nexport default function isUndefined(obj) {\n return obj === void 0;\n}\n","import { toString } from './_setup.js';\n\n// Is a given value a boolean?\nexport default function isBoolean(obj) {\n return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n}\n","// Is a given value a DOM element?\nexport default function isElement(obj) {\n return !!(obj && obj.nodeType === 1);\n}\n","import { toString } from './_setup.js';\n\n// Internal function for creating a `toString`-based type tester.\nexport default function tagTester(name) {\n var tag = '[object ' + name + ']';\n return function(obj) {\n return toString.call(obj) === tag;\n };\n}\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('String');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Number');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Date');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('RegExp');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Error');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Symbol');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('ArrayBuffer');\n","import tagTester from './_tagTester.js';\nimport { root } from './_setup.js';\n\nvar isFunction = tagTester('Function');\n\n// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old\n// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).\nvar nodelist = root.document && root.document.childNodes;\nif (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {\n isFunction = function(obj) {\n return typeof obj == 'function' || false;\n };\n}\n\nexport default isFunction;\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Object');\n","import { supportsDataView } from './_setup.js';\nimport hasObjectTag from './_hasObjectTag.js';\n\n// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`.\n// In IE 11, the most common among them, this problem also applies to\n// `Map`, `WeakMap` and `Set`.\nexport var hasStringTagBug = (\n supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8)))\n ),\n isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map));\n","import tagTester from './_tagTester.js';\nimport isFunction from './isFunction.js';\nimport isArrayBuffer from './isArrayBuffer.js';\nimport { hasStringTagBug } from './_stringTagBug.js';\n\nvar isDataView = tagTester('DataView');\n\n// In IE 10 - Edge 13, we need a different heuristic\n// to determine whether an object is a `DataView`.\nfunction ie10IsDataView(obj) {\n return obj != null && isFunction(obj.getInt8) && isArrayBuffer(obj.buffer);\n}\n\nexport default (hasStringTagBug ? ie10IsDataView : isDataView);\n","import { nativeIsArray } from './_setup.js';\nimport tagTester from './_tagTester.js';\n\n// Is a given value an array?\n// Delegates to ECMA5's native `Array.isArray`.\nexport default nativeIsArray || tagTester('Array');\n","import { hasOwnProperty } from './_setup.js';\n\n// Internal function to check whether `key` is an own property name of `obj`.\nexport default function has(obj, key) {\n return obj != null && hasOwnProperty.call(obj, key);\n}\n","import tagTester from './_tagTester.js';\nimport has from './_has.js';\n\nvar isArguments = tagTester('Arguments');\n\n// Define a fallback version of the method in browsers (ahem, IE < 9), where\n// there isn't any inspectable \"Arguments\" type.\n(function() {\n if (!isArguments(arguments)) {\n isArguments = function(obj) {\n return has(obj, 'callee');\n };\n }\n}());\n\nexport default isArguments;\n","import { _isFinite } from './_setup.js';\nimport isSymbol from './isSymbol.js';\n\n// Is a given object a finite number?\nexport default function isFinite(obj) {\n return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj));\n}\n","import { _isNaN } from './_setup.js';\nimport isNumber from './isNumber.js';\n\n// Is the given value `NaN`?\nexport default function isNaN(obj) {\n return isNumber(obj) && _isNaN(obj);\n}\n","// Predicate-generating function. Often useful outside of Underscore.\nexport default function constant(value) {\n return function() {\n return value;\n };\n}\n","import { MAX_ARRAY_INDEX } from './_setup.js';\n\n// Common internal logic for `isArrayLike` and `isBufferLike`.\nexport default function createSizePropertyCheck(getSizeProperty) {\n return function(collection) {\n var sizeProperty = getSizeProperty(collection);\n return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX;\n }\n}\n","// Internal helper to generate a function to obtain property `key` from `obj`.\nexport default function shallowProperty(key) {\n return function(obj) {\n return obj == null ? void 0 : obj[key];\n };\n}\n","import shallowProperty from './_shallowProperty.js';\n\n// Internal helper to obtain the `byteLength` property of an object.\nexport default shallowProperty('byteLength');\n","import createSizePropertyCheck from './_createSizePropertyCheck.js';\nimport getByteLength from './_getByteLength.js';\n\n// Internal helper to determine whether we should spend extensive checks against\n// `ArrayBuffer` et al.\nexport default createSizePropertyCheck(getByteLength);\n","import { supportsArrayBuffer, nativeIsView, toString } from './_setup.js';\nimport isDataView from './isDataView.js';\nimport constant from './constant.js';\nimport isBufferLike from './_isBufferLike.js';\n\n// Is a given value a typed array?\nvar typedArrayPattern = /\\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\\]/;\nfunction isTypedArray(obj) {\n // `ArrayBuffer.isView` is the most future-proof, so use it when available.\n // Otherwise, fall back on the above regular expression.\n return nativeIsView ? (nativeIsView(obj) && !isDataView(obj)) :\n isBufferLike(obj) && typedArrayPattern.test(toString.call(obj));\n}\n\nexport default supportsArrayBuffer ? isTypedArray : constant(false);\n","import shallowProperty from './_shallowProperty.js';\n\n// Internal helper to obtain the `length` property of an object.\nexport default shallowProperty('length');\n","import { nonEnumerableProps, ObjProto } from './_setup.js';\nimport isFunction from './isFunction.js';\nimport has from './_has.js';\n\n// Internal helper to create a simple lookup structure.\n// `collectNonEnumProps` used to depend on `_.contains`, but this led to\n// circular imports. `emulatedSet` is a one-off solution that only works for\n// arrays of strings.\nfunction emulatedSet(keys) {\n var hash = {};\n for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true;\n return {\n contains: function(key) { return hash[key] === true; },\n push: function(key) {\n hash[key] = true;\n return keys.push(key);\n }\n };\n}\n\n// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't\n// be iterated by `for key in ...` and thus missed. Extends `keys` in place if\n// needed.\nexport default function collectNonEnumProps(obj, keys) {\n keys = emulatedSet(keys);\n var nonEnumIdx = nonEnumerableProps.length;\n var constructor = obj.constructor;\n var proto = (isFunction(constructor) && constructor.prototype) || ObjProto;\n\n // Constructor is a special case.\n var prop = 'constructor';\n if (has(obj, prop) && !keys.contains(prop)) keys.push(prop);\n\n while (nonEnumIdx--) {\n prop = nonEnumerableProps[nonEnumIdx];\n if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) {\n keys.push(prop);\n }\n }\n}\n","import isObject from './isObject.js';\nimport { nativeKeys, hasEnumBug } from './_setup.js';\nimport has from './_has.js';\nimport collectNonEnumProps from './_collectNonEnumProps.js';\n\n// Retrieve the names of an object's own properties.\n// Delegates to **ECMAScript 5**'s native `Object.keys`.\nexport default function keys(obj) {\n if (!isObject(obj)) return [];\n if (nativeKeys) return nativeKeys(obj);\n var keys = [];\n for (var key in obj) if (has(obj, key)) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n}\n","import getLength from './_getLength.js';\nimport isArray from './isArray.js';\nimport isString from './isString.js';\nimport isArguments from './isArguments.js';\nimport keys from './keys.js';\n\n// Is a given array, string, or object empty?\n// An \"empty\" object has no enumerable own-properties.\nexport default function isEmpty(obj) {\n if (obj == null) return true;\n // Skip the more expensive `toString`-based type checks if `obj` has no\n // `.length`.\n var length = getLength(obj);\n if (typeof length == 'number' && (\n isArray(obj) || isString(obj) || isArguments(obj)\n )) return length === 0;\n return getLength(keys(obj)) === 0;\n}\n","import keys from './keys.js';\n\n// Returns whether an object has a given set of `key:value` pairs.\nexport default function isMatch(object, attrs) {\n var _keys = keys(attrs), length = _keys.length;\n if (object == null) return !length;\n var obj = Object(object);\n for (var i = 0; i < length; i++) {\n var key = _keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) return false;\n }\n return true;\n}\n","import { VERSION } from './_setup.js';\n\n// If Underscore is called as a function, it returns a wrapped object that can\n// be used OO-style. This wrapper holds altered versions of all functions added\n// through `_.mixin`. Wrapped objects may be chained.\nexport default function _(obj) {\n if (obj instanceof _) return obj;\n if (!(this instanceof _)) return new _(obj);\n this._wrapped = obj;\n}\n\n_.VERSION = VERSION;\n\n// Extracts the result from a wrapped and chained object.\n_.prototype.value = function() {\n return this._wrapped;\n};\n\n// Provide unwrapping proxies for some methods used in engine operations\n// such as arithmetic and JSON stringification.\n_.prototype.valueOf = _.prototype.toJSON = _.prototype.value;\n\n_.prototype.toString = function() {\n return String(this._wrapped);\n};\n","import getByteLength from './_getByteLength.js';\n\n// Internal function to wrap or shallow-copy an ArrayBuffer,\n// typed array or DataView to a new view, reusing the buffer.\nexport default function toBufferView(bufferSource) {\n return new Uint8Array(\n bufferSource.buffer || bufferSource,\n bufferSource.byteOffset || 0,\n getByteLength(bufferSource)\n );\n}\n","import _ from './underscore.js';\nimport { toString, SymbolProto } from './_setup.js';\nimport getByteLength from './_getByteLength.js';\nimport isTypedArray from './isTypedArray.js';\nimport isFunction from './isFunction.js';\nimport { hasStringTagBug } from './_stringTagBug.js';\nimport isDataView from './isDataView.js';\nimport keys from './keys.js';\nimport has from './_has.js';\nimport toBufferView from './_toBufferView.js';\n\n// We use this string twice, so give it a name for minification.\nvar tagDataView = '[object DataView]';\n\n// Internal recursive comparison function for `_.isEqual`.\nfunction eq(a, b, aStack, bStack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) return a !== 0 || 1 / a === 1 / b;\n // `null` or `undefined` only equal to itself (strict comparison).\n if (a == null || b == null) return false;\n // `NaN`s are equivalent, but non-reflexive.\n if (a !== a) return b !== b;\n // Exhaust primitive checks\n var type = typeof a;\n if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;\n return deepEq(a, b, aStack, bStack);\n}\n\n// Internal recursive comparison function for `_.isEqual`.\nfunction deepEq(a, b, aStack, bStack) {\n // Unwrap any wrapped objects.\n if (a instanceof _) a = a._wrapped;\n if (b instanceof _) b = b._wrapped;\n // Compare `[[Class]]` names.\n var className = toString.call(a);\n if (className !== toString.call(b)) return false;\n // Work around a bug in IE 10 - Edge 13.\n if (hasStringTagBug && className == '[object Object]' && isDataView(a)) {\n if (!isDataView(b)) return false;\n className = tagDataView;\n }\n switch (className) {\n // These types are compared by value.\n case '[object RegExp]':\n // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return '' + a === '' + b;\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive.\n // Object(NaN) is equivalent to NaN.\n if (+a !== +a) return +b !== +b;\n // An `egal` comparison is performed for other numeric values.\n return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n case '[object Date]':\n case '[object Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a === +b;\n case '[object Symbol]':\n return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);\n case '[object ArrayBuffer]':\n case tagDataView:\n // Coerce to typed array so we can fall through.\n return deepEq(toBufferView(a), toBufferView(b), aStack, bStack);\n }\n\n var areArrays = className === '[object Array]';\n if (!areArrays && isTypedArray(a)) {\n var byteLength = getByteLength(a);\n if (byteLength !== getByteLength(b)) return false;\n if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true;\n areArrays = true;\n }\n if (!areArrays) {\n if (typeof a != 'object' || typeof b != 'object') return false;\n\n // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n // from different frames are.\n var aCtor = a.constructor, bCtor = b.constructor;\n if (aCtor !== bCtor && !(isFunction(aCtor) && aCtor instanceof aCtor &&\n isFunction(bCtor) && bCtor instanceof bCtor)\n && ('constructor' in a && 'constructor' in b)) {\n return false;\n }\n }\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n // Initializing stack of traversed objects.\n // It's done here since we only need them for objects and arrays comparison.\n aStack = aStack || [];\n bStack = bStack || [];\n var length = aStack.length;\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] === a) return bStack[length] === b;\n }\n\n // Add the first object to the stack of traversed objects.\n aStack.push(a);\n bStack.push(b);\n\n // Recursively compare objects and arrays.\n if (areArrays) {\n // Compare array lengths to determine if a deep comparison is necessary.\n length = a.length;\n if (length !== b.length) return false;\n // Deep compare the contents, ignoring non-numeric properties.\n while (length--) {\n if (!eq(a[length], b[length], aStack, bStack)) return false;\n }\n } else {\n // Deep compare objects.\n var _keys = keys(a), key;\n length = _keys.length;\n // Ensure that both objects contain the same number of properties before comparing deep equality.\n if (keys(b).length !== length) return false;\n while (length--) {\n // Deep compare each member\n key = _keys[length];\n if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n }\n }\n // Remove the first object from the stack of traversed objects.\n aStack.pop();\n bStack.pop();\n return true;\n}\n\n// Perform a deep comparison to check if two objects are equal.\nexport default function isEqual(a, b) {\n return eq(a, b);\n}\n","import isObject from './isObject.js';\nimport { hasEnumBug } from './_setup.js';\nimport collectNonEnumProps from './_collectNonEnumProps.js';\n\n// Retrieve all the enumerable property names of an object.\nexport default function allKeys(obj) {\n if (!isObject(obj)) return [];\n var keys = [];\n for (var key in obj) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n}\n","import getLength from './_getLength.js';\nimport isFunction from './isFunction.js';\nimport allKeys from './allKeys.js';\n\n// Since the regular `Object.prototype.toString` type tests don't work for\n// some types in IE 11, we use a fingerprinting heuristic instead, based\n// on the methods. It's not great, but it's the best we got.\n// The fingerprint method lists are defined below.\nexport function ie11fingerprint(methods) {\n var length = getLength(methods);\n return function(obj) {\n if (obj == null) return false;\n // `Map`, `WeakMap` and `Set` have no enumerable keys.\n var keys = allKeys(obj);\n if (getLength(keys)) return false;\n for (var i = 0; i < length; i++) {\n if (!isFunction(obj[methods[i]])) return false;\n }\n // If we are testing against `WeakMap`, we need to ensure that\n // `obj` doesn't have a `forEach` method in order to distinguish\n // it from a regular `Map`.\n return methods !== weakMapMethods || !isFunction(obj[forEachName]);\n };\n}\n\n// In the interest of compact minification, we write\n// each string in the fingerprints only once.\nvar forEachName = 'forEach',\n hasName = 'has',\n commonInit = ['clear', 'delete'],\n mapTail = ['get', hasName, 'set'];\n\n// `Map`, `WeakMap` and `Set` each have slightly different\n// combinations of the above sublists.\nexport var mapMethods = commonInit.concat(forEachName, mapTail),\n weakMapMethods = commonInit.concat(mapTail),\n setMethods = ['add'].concat(commonInit, forEachName, hasName);\n","import tagTester from './_tagTester.js';\nimport { isIE11 } from './_stringTagBug.js';\nimport { ie11fingerprint, mapMethods } from './_methodFingerprint.js';\n\nexport default isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map');\n","import tagTester from './_tagTester.js';\nimport { isIE11 } from './_stringTagBug.js';\nimport { ie11fingerprint, weakMapMethods } from './_methodFingerprint.js';\n\nexport default isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap');\n","import tagTester from './_tagTester.js';\nimport { isIE11 } from './_stringTagBug.js';\nimport { ie11fingerprint, setMethods } from './_methodFingerprint.js';\n\nexport default isIE11 ? ie11fingerprint(setMethods) : tagTester('Set');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('WeakSet');\n","import keys from './keys.js';\n\n// Retrieve the values of an object's properties.\nexport default function values(obj) {\n var _keys = keys(obj);\n var length = _keys.length;\n var values = Array(length);\n for (var i = 0; i < length; i++) {\n values[i] = obj[_keys[i]];\n }\n return values;\n}\n","import keys from './keys.js';\n\n// Convert an object into a list of `[key, value]` pairs.\n// The opposite of `_.object` with one argument.\nexport default function pairs(obj) {\n var _keys = keys(obj);\n var length = _keys.length;\n var pairs = Array(length);\n for (var i = 0; i < length; i++) {\n pairs[i] = [_keys[i], obj[_keys[i]]];\n }\n return pairs;\n}\n","import keys from './keys.js';\n\n// Invert the keys and values of an object. The values must be serializable.\nexport default function invert(obj) {\n var result = {};\n var _keys = keys(obj);\n for (var i = 0, length = _keys.length; i < length; i++) {\n result[obj[_keys[i]]] = _keys[i];\n }\n return result;\n}\n","import isFunction from './isFunction.js';\n\n// Return a sorted list of the function names available on the object.\nexport default function functions(obj) {\n var names = [];\n for (var key in obj) {\n if (isFunction(obj[key])) names.push(key);\n }\n return names.sort();\n}\n","// An internal function for creating assigner functions.\nexport default function createAssigner(keysFunc, defaults) {\n return function(obj) {\n var length = arguments.length;\n if (defaults) obj = Object(obj);\n if (length < 2 || obj == null) return obj;\n for (var index = 1; index < length; index++) {\n var source = arguments[index],\n keys = keysFunc(source),\n l = keys.length;\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n if (!defaults || obj[key] === void 0) obj[key] = source[key];\n }\n }\n return obj;\n };\n}\n","import createAssigner from './_createAssigner.js';\nimport allKeys from './allKeys.js';\n\n// Extend a given object with all the properties in passed-in object(s).\nexport default createAssigner(allKeys);\n","import createAssigner from './_createAssigner.js';\nimport keys from './keys.js';\n\n// Assigns a given object with all the own properties in the passed-in\n// object(s).\n// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\nexport default createAssigner(keys);\n","import createAssigner from './_createAssigner.js';\nimport allKeys from './allKeys.js';\n\n// Fill in a given object with default properties.\nexport default createAssigner(allKeys, true);\n","import isObject from './isObject.js';\nimport { nativeCreate } from './_setup.js';\n\n// Create a naked function reference for surrogate-prototype-swapping.\nfunction ctor() {\n return function(){};\n}\n\n// An internal function for creating a new object that inherits from another.\nexport default function baseCreate(prototype) {\n if (!isObject(prototype)) return {};\n if (nativeCreate) return nativeCreate(prototype);\n var Ctor = ctor();\n Ctor.prototype = prototype;\n var result = new Ctor;\n Ctor.prototype = null;\n return result;\n}\n","import baseCreate from './_baseCreate.js';\nimport extendOwn from './extendOwn.js';\n\n// Creates an object that inherits from the given prototype object.\n// If additional properties are provided then they will be added to the\n// created object.\nexport default function create(prototype, props) {\n var result = baseCreate(prototype);\n if (props) extendOwn(result, props);\n return result;\n}\n","import isObject from './isObject.js';\nimport isArray from './isArray.js';\nimport extend from './extend.js';\n\n// Create a (shallow-cloned) duplicate of an object.\nexport default function clone(obj) {\n if (!isObject(obj)) return obj;\n return isArray(obj) ? obj.slice() : extend({}, obj);\n}\n","// Invokes `interceptor` with the `obj` and then returns `obj`.\n// The primary purpose of this method is to \"tap into\" a method chain, in\n// order to perform operations on intermediate results within the chain.\nexport default function tap(obj, interceptor) {\n interceptor(obj);\n return obj;\n}\n","import _ from './underscore.js';\nimport isArray from './isArray.js';\n\n// Normalize a (deep) property `path` to array.\n// Like `_.iteratee`, this function can be customized.\nexport default function toPath(path) {\n return isArray(path) ? path : [path];\n}\n_.toPath = toPath;\n","import _ from './underscore.js';\nimport './toPath.js';\n\n// Internal wrapper for `_.toPath` to enable minification.\n// Similar to `cb` for `_.iteratee`.\nexport default function toPath(path) {\n return _.toPath(path);\n}\n","// Internal function to obtain a nested property in `obj` along `path`.\nexport default function deepGet(obj, path) {\n var length = path.length;\n for (var i = 0; i < length; i++) {\n if (obj == null) return void 0;\n obj = obj[path[i]];\n }\n return length ? obj : void 0;\n}\n","import toPath from './_toPath.js';\nimport deepGet from './_deepGet.js';\nimport isUndefined from './isUndefined.js';\n\n// Get the value of the (deep) property on `path` from `object`.\n// If any property in `path` does not exist or if the value is\n// `undefined`, return `defaultValue` instead.\n// The `path` is normalized through `_.toPath`.\nexport default function get(object, path, defaultValue) {\n var value = deepGet(object, toPath(path));\n return isUndefined(value) ? defaultValue : value;\n}\n","import _has from './_has.js';\nimport toPath from './_toPath.js';\n\n// Shortcut function for checking if an object has a given property directly on\n// itself (in other words, not on a prototype). Unlike the internal `has`\n// function, this public version can also traverse nested properties.\nexport default function has(obj, path) {\n path = toPath(path);\n var length = path.length;\n for (var i = 0; i < length; i++) {\n var key = path[i];\n if (!_has(obj, key)) return false;\n obj = obj[key];\n }\n return !!length;\n}\n","// Keep the identity function around for default iteratees.\nexport default function identity(value) {\n return value;\n}\n","import extendOwn from './extendOwn.js';\nimport isMatch from './isMatch.js';\n\n// Returns a predicate for checking whether an object has a given set of\n// `key:value` pairs.\nexport default function matcher(attrs) {\n attrs = extendOwn({}, attrs);\n return function(obj) {\n return isMatch(obj, attrs);\n };\n}\n","import deepGet from './_deepGet.js';\nimport toPath from './_toPath.js';\n\n// Creates a function that, when passed an object, will traverse that object’s\n// properties down the given `path`, specified as an array of keys or indices.\nexport default function property(path) {\n path = toPath(path);\n return function(obj) {\n return deepGet(obj, path);\n };\n}\n","// Internal function that returns an efficient (for current engines) version\n// of the passed-in callback, to be repeatedly applied in other Underscore\n// functions.\nexport default function optimizeCb(func, context, argCount) {\n if (context === void 0) return func;\n switch (argCount == null ? 3 : argCount) {\n case 1: return function(value) {\n return func.call(context, value);\n };\n // The 2-argument case is omitted because we’re not using it.\n case 3: return function(value, index, collection) {\n return func.call(context, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(context, accumulator, value, index, collection);\n };\n }\n return function() {\n return func.apply(context, arguments);\n };\n}\n","import identity from './identity.js';\nimport isFunction from './isFunction.js';\nimport isObject from './isObject.js';\nimport isArray from './isArray.js';\nimport matcher from './matcher.js';\nimport property from './property.js';\nimport optimizeCb from './_optimizeCb.js';\n\n// An internal function to generate callbacks that can be applied to each\n// element in a collection, returning the desired result — either `_.identity`,\n// an arbitrary callback, a property matcher, or a property accessor.\nexport default function baseIteratee(value, context, argCount) {\n if (value == null) return identity;\n if (isFunction(value)) return optimizeCb(value, context, argCount);\n if (isObject(value) && !isArray(value)) return matcher(value);\n return property(value);\n}\n","import _ from './underscore.js';\nimport baseIteratee from './_baseIteratee.js';\n\n// External wrapper for our callback generator. Users may customize\n// `_.iteratee` if they want additional predicate/iteratee shorthand styles.\n// This abstraction hides the internal-only `argCount` argument.\nexport default function iteratee(value, context) {\n return baseIteratee(value, context, Infinity);\n}\n_.iteratee = iteratee;\n","import _ from './underscore.js';\nimport baseIteratee from './_baseIteratee.js';\nimport iteratee from './iteratee.js';\n\n// The function we call internally to generate a callback. It invokes\n// `_.iteratee` if overridden, otherwise `baseIteratee`.\nexport default function cb(value, context, argCount) {\n if (_.iteratee !== iteratee) return _.iteratee(value, context);\n return baseIteratee(value, context, argCount);\n}\n","import cb from './_cb.js';\nimport keys from './keys.js';\n\n// Returns the results of applying the `iteratee` to each element of `obj`.\n// In contrast to `_.map` it returns an object.\nexport default function mapObject(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var _keys = keys(obj),\n length = _keys.length,\n results = {};\n for (var index = 0; index < length; index++) {\n var currentKey = _keys[index];\n results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n}\n","// Predicate-generating function. Often useful outside of Underscore.\nexport default function noop(){}\n","import noop from './noop.js';\nimport get from './get.js';\n\n// Generates a function for a given object that returns a given property.\nexport default function propertyOf(obj) {\n if (obj == null) return noop;\n return function(path) {\n return get(obj, path);\n };\n}\n","import optimizeCb from './_optimizeCb.js';\n\n// Run a function **n** times.\nexport default function times(n, iteratee, context) {\n var accum = Array(Math.max(0, n));\n iteratee = optimizeCb(iteratee, context, 1);\n for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n return accum;\n}\n","// Return a random integer between `min` and `max` (inclusive).\nexport default function random(min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n return min + Math.floor(Math.random() * (max - min + 1));\n}\n","// A (possibly faster) way to get the current timestamp as an integer.\nexport default Date.now || function() {\n return new Date().getTime();\n};\n","import keys from './keys.js';\n\n// Internal helper to generate functions for escaping and unescaping strings\n// to/from HTML interpolation.\nexport default function createEscaper(map) {\n var escaper = function(match) {\n return map[match];\n };\n // Regexes for identifying a key that needs to be escaped.\n var source = '(?:' + keys(map).join('|') + ')';\n var testRegexp = RegExp(source);\n var replaceRegexp = RegExp(source, 'g');\n return function(string) {\n string = string == null ? '' : '' + string;\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n };\n}\n","// Internal list of HTML entities for escaping.\nexport default {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#x27;',\n '`': '&#x60;'\n};\n","import createEscaper from './_createEscaper.js';\nimport escapeMap from './_escapeMap.js';\n\n// Function for escaping strings to HTML interpolation.\nexport default createEscaper(escapeMap);\n","import invert from './invert.js';\nimport escapeMap from './_escapeMap.js';\n\n// Internal list of HTML entities for unescaping.\nexport default invert(escapeMap);\n","import createEscaper from './_createEscaper.js';\nimport unescapeMap from './_unescapeMap.js';\n\n// Function for unescaping strings from HTML interpolation.\nexport default createEscaper(unescapeMap);\n","import _ from './underscore.js';\n\n// By default, Underscore uses ERB-style template delimiters. Change the\n// following template settings to use alternative delimiters.\nexport default _.templateSettings = {\n evaluate: /<%([\\s\\S]+?)%>/g,\n interpolate: /<%=([\\s\\S]+?)%>/g,\n escape: /<%-([\\s\\S]+?)%>/g\n};\n","import defaults from './defaults.js';\nimport _ from './underscore.js';\nimport './templateSettings.js';\n\n// When customizing `_.templateSettings`, if you don't want to define an\n// interpolation, evaluation or escaping regex, we need one that is\n// guaranteed not to match.\nvar noMatch = /(.)^/;\n\n// Certain characters need to be escaped so that they can be put into a\n// string literal.\nvar escapes = {\n \"'\": \"'\",\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n};\n\nvar escapeRegExp = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\nfunction escapeChar(match) {\n return '\\\\' + escapes[match];\n}\n\n// In order to prevent third-party code injection through\n// `_.templateSettings.variable`, we test it against the following regular\n// expression. It is intentionally a bit more liberal than just matching valid\n// identifiers, but still prevents possible loopholes through defaults or\n// destructuring assignment.\nvar bareIdentifier = /^\\s*(\\w|\\$)+\\s*$/;\n\n// JavaScript micro-templating, similar to John Resig's implementation.\n// Underscore templating handles arbitrary delimiters, preserves whitespace,\n// and correctly escapes quotes within interpolated code.\n// NB: `oldSettings` only exists for backwards compatibility.\nexport default function template(text, settings, oldSettings) {\n if (!settings && oldSettings) settings = oldSettings;\n settings = defaults({}, settings, _.templateSettings);\n\n // Combine delimiters into one regular expression via alternation.\n var matcher = RegExp([\n (settings.escape || noMatch).source,\n (settings.interpolate || noMatch).source,\n (settings.evaluate || noMatch).source\n ].join('|') + '|$', 'g');\n\n // Compile the template source, escaping string literals appropriately.\n var index = 0;\n var source = \"__p+='\";\n text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset).replace(escapeRegExp, escapeChar);\n index = offset + match.length;\n\n if (escape) {\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n } else if (interpolate) {\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n } else if (evaluate) {\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\n }\n\n // Adobe VMs need the match returned to produce the correct offset.\n return match;\n });\n source += \"';\\n\";\n\n var argument = settings.variable;\n if (argument) {\n // Insure against third-party code injection. (CVE-2021-23358)\n if (!bareIdentifier.test(argument)) throw new Error(\n 'variable is not a bare identifier: ' + argument\n );\n } else {\n // If a variable is not specified, place data values in local scope.\n source = 'with(obj||{}){\\n' + source + '}\\n';\n argument = 'obj';\n }\n\n source = \"var __t,__p='',__j=Array.prototype.join,\" +\n \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n source + 'return __p;\\n';\n\n var render;\n try {\n render = new Function(argument, '_', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n\n var template = function(data) {\n return render.call(this, data, _);\n };\n\n // Provide the compiled source as a convenience for precompilation.\n template.source = 'function(' + argument + '){\\n' + source + '}';\n\n return template;\n}\n","import isFunction from './isFunction.js';\nimport toPath from './_toPath.js';\n\n// Traverses the children of `obj` along `path`. If a child is a function, it\n// is invoked with its parent as context. Returns the value of the final\n// child, or `fallback` if any child is undefined.\nexport default function result(obj, path, fallback) {\n path = toPath(path);\n var length = path.length;\n if (!length) {\n return isFunction(fallback) ? fallback.call(obj) : fallback;\n }\n for (var i = 0; i < length; i++) {\n var prop = obj == null ? void 0 : obj[path[i]];\n if (prop === void 0) {\n prop = fallback;\n i = length; // Ensure we don't continue iterating.\n }\n obj = isFunction(prop) ? prop.call(obj) : prop;\n }\n return obj;\n}\n","// Generate a unique integer id (unique within the entire client session).\n// Useful for temporary DOM ids.\nvar idCounter = 0;\nexport default function uniqueId(prefix) {\n var id = ++idCounter + '';\n return prefix ? prefix + id : id;\n}\n","import _ from './underscore.js';\n\n// Start chaining a wrapped Underscore object.\nexport default function chain(obj) {\n var instance = _(obj);\n instance._chain = true;\n return instance;\n}\n","import baseCreate from './_baseCreate.js';\nimport isObject from './isObject.js';\n\n// Internal function to execute `sourceFunc` bound to `context` with optional\n// `args`. Determines whether to execute a function as a constructor or as a\n// normal function.\nexport default function executeBound(sourceFunc, boundFunc, context, callingContext, args) {\n if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n var self = baseCreate(sourceFunc.prototype);\n var result = sourceFunc.apply(self, args);\n if (isObject(result)) return result;\n return self;\n}\n","import restArguments from './restArguments.js';\nimport executeBound from './_executeBound.js';\nimport _ from './underscore.js';\n\n// Partially apply a function by creating a version that has had some of its\n// arguments pre-filled, without changing its dynamic `this` context. `_` acts\n// as a placeholder by default, allowing any combination of arguments to be\n// pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.\nvar partial = restArguments(function(func, boundArgs) {\n var placeholder = partial.placeholder;\n var bound = function() {\n var position = 0, length = boundArgs.length;\n var args = Array(length);\n for (var i = 0; i < length; i++) {\n args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];\n }\n while (position < arguments.length) args.push(arguments[position++]);\n return executeBound(func, bound, this, this, args);\n };\n return bound;\n});\n\npartial.placeholder = _;\nexport default partial;\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport executeBound from './_executeBound.js';\n\n// Create a function bound to a given object (assigning `this`, and arguments,\n// optionally).\nexport default restArguments(function(func, context, args) {\n if (!isFunction(func)) throw new TypeError('Bind must be called on a function');\n var bound = restArguments(function(callArgs) {\n return executeBound(func, bound, context, this, args.concat(callArgs));\n });\n return bound;\n});\n","import createSizePropertyCheck from './_createSizePropertyCheck.js';\nimport getLength from './_getLength.js';\n\n// Internal helper for collection methods to determine whether a collection\n// should be iterated as an array or as an object.\n// Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n// Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\nexport default createSizePropertyCheck(getLength);\n","import getLength from './_getLength.js';\nimport isArrayLike from './_isArrayLike.js';\nimport isArray from './isArray.js';\nimport isArguments from './isArguments.js';\n\n// Internal implementation of a recursive `flatten` function.\nexport default function flatten(input, depth, strict, output) {\n output = output || [];\n if (!depth && depth !== 0) {\n depth = Infinity;\n } else if (depth <= 0) {\n return output.concat(input);\n }\n var idx = output.length;\n for (var i = 0, length = getLength(input); i < length; i++) {\n var value = input[i];\n if (isArrayLike(value) && (isArray(value) || isArguments(value))) {\n // Flatten current level of array or arguments object.\n if (depth > 1) {\n flatten(value, depth - 1, strict, output);\n idx = output.length;\n } else {\n var j = 0, len = value.length;\n while (j < len) output[idx++] = value[j++];\n }\n } else if (!strict) {\n output[idx++] = value;\n }\n }\n return output;\n}\n","import restArguments from './restArguments.js';\nimport flatten from './_flatten.js';\nimport bind from './bind.js';\n\n// Bind a number of an object's methods to that object. Remaining arguments\n// are the method names to be bound. Useful for ensuring that all callbacks\n// defined on an object belong to it.\nexport default restArguments(function(obj, keys) {\n keys = flatten(keys, false, false);\n var index = keys.length;\n if (index < 1) throw new Error('bindAll must be passed function names');\n while (index--) {\n var key = keys[index];\n obj[key] = bind(obj[key], obj);\n }\n return obj;\n});\n","import has from './_has.js';\n\n// Memoize an expensive function by storing its results.\nexport default function memoize(func, hasher) {\n var memoize = function(key) {\n var cache = memoize.cache;\n var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n if (!has(cache, address)) cache[address] = func.apply(this, arguments);\n return cache[address];\n };\n memoize.cache = {};\n return memoize;\n}\n","import restArguments from './restArguments.js';\n\n// Delays a function for the given number of milliseconds, and then calls\n// it with the arguments supplied.\nexport default restArguments(function(func, wait, args) {\n return setTimeout(function() {\n return func.apply(null, args);\n }, wait);\n});\n","import partial from './partial.js';\nimport delay from './delay.js';\nimport _ from './underscore.js';\n\n// Defers a function, scheduling it to run after the current call stack has\n// cleared.\nexport default partial(delay, _, 1);\n","import now from './now.js';\n\n// Returns a function, that, when invoked, will only be triggered at most once\n// during a given window of time. Normally, the throttled function will run\n// as much as it can, without ever going more than once per `wait` duration;\n// but if you'd like to disable the execution on the leading edge, pass\n// `{leading: false}`. To disable execution on the trailing edge, ditto.\nexport default function throttle(func, wait, options) {\n var timeout, context, args, result;\n var previous = 0;\n if (!options) options = {};\n\n var later = function() {\n previous = options.leading === false ? 0 : now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n\n var throttled = function() {\n var _now = now();\n if (!previous && options.leading === false) previous = _now;\n var remaining = wait - (_now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = _now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n\n throttled.cancel = function() {\n clearTimeout(timeout);\n previous = 0;\n timeout = context = args = null;\n };\n\n return throttled;\n}\n","import restArguments from './restArguments.js';\nimport now from './now.js';\n\n// When a sequence of calls of the returned function ends, the argument\n// function is triggered. The end of a sequence is defined by the `wait`\n// parameter. If `immediate` is passed, the argument function will be\n// triggered at the beginning of the sequence instead of at the end.\nexport default function debounce(func, wait, immediate) {\n var timeout, previous, args, result, context;\n\n var later = function() {\n var passed = now() - previous;\n if (wait > passed) {\n timeout = setTimeout(later, wait - passed);\n } else {\n timeout = null;\n if (!immediate) result = func.apply(context, args);\n // This check is needed because `func` can recursively invoke `debounced`.\n if (!timeout) args = context = null;\n }\n };\n\n var debounced = restArguments(function(_args) {\n context = this;\n args = _args;\n previous = now();\n if (!timeout) {\n timeout = setTimeout(later, wait);\n if (immediate) result = func.apply(context, args);\n }\n return result;\n });\n\n debounced.cancel = function() {\n clearTimeout(timeout);\n timeout = args = context = null;\n };\n\n return debounced;\n}\n","import partial from './partial.js';\n\n// Returns the first function passed as an argument to the second,\n// allowing you to adjust arguments, run code before and after, and\n// conditionally execute the original function.\nexport default function wrap(func, wrapper) {\n return partial(wrapper, func);\n}\n","// Returns a negated version of the passed-in predicate.\nexport default function negate(predicate) {\n return function() {\n return !predicate.apply(this, arguments);\n };\n}\n","// Returns a function that is the composition of a list of functions, each\n// consuming the return value of the function that follows.\nexport default function compose() {\n var args = arguments;\n var start = args.length - 1;\n return function() {\n var i = start;\n var result = args[start].apply(this, arguments);\n while (i--) result = args[i].call(this, result);\n return result;\n };\n}\n","// Returns a function that will only be executed on and after the Nth call.\nexport default function after(times, func) {\n return function() {\n if (--times < 1) {\n return func.apply(this, arguments);\n }\n };\n}\n","// Returns a function that will only be executed up to (but not including) the\n// Nth call.\nexport default function before(times, func) {\n var memo;\n return function() {\n if (--times > 0) {\n memo = func.apply(this, arguments);\n }\n if (times <= 1) func = null;\n return memo;\n };\n}\n","import partial from './partial.js';\nimport before from './before.js';\n\n// Returns a function that will be executed at most one time, no matter how\n// often you call it. Useful for lazy initialization.\nexport default partial(before, 2);\n","import cb from './_cb.js';\nimport keys from './keys.js';\n\n// Returns the first key on an object that passes a truth test.\nexport default function findKey(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = keys(obj), key;\n for (var i = 0, length = _keys.length; i < length; i++) {\n key = _keys[i];\n if (predicate(obj[key], key, obj)) return key;\n }\n}\n","import cb from './_cb.js';\nimport getLength from './_getLength.js';\n\n// Internal function to generate `_.findIndex` and `_.findLastIndex`.\nexport default function createPredicateIndexFinder(dir) {\n return function(array, predicate, context) {\n predicate = cb(predicate, context);\n var length = getLength(array);\n var index = dir > 0 ? 0 : length - 1;\n for (; index >= 0 && index < length; index += dir) {\n if (predicate(array[index], index, array)) return index;\n }\n return -1;\n };\n}\n","import createPredicateIndexFinder from './_createPredicateIndexFinder.js';\n\n// Returns the first index on an array-like that passes a truth test.\nexport default createPredicateIndexFinder(1);\n","import createPredicateIndexFinder from './_createPredicateIndexFinder.js';\n\n// Returns the last index on an array-like that passes a truth test.\nexport default createPredicateIndexFinder(-1);\n","import cb from './_cb.js';\nimport getLength from './_getLength.js';\n\n// Use a comparator function to figure out the smallest index at which\n// an object should be inserted so as to maintain order. Uses binary search.\nexport default function sortedIndex(array, obj, iteratee, context) {\n iteratee = cb(iteratee, context, 1);\n var value = iteratee(obj);\n var low = 0, high = getLength(array);\n while (low < high) {\n var mid = Math.floor((low + high) / 2);\n if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n }\n return low;\n}\n","import getLength from './_getLength.js';\nimport { slice } from './_setup.js';\nimport isNaN from './isNaN.js';\n\n// Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions.\nexport default function createIndexFinder(dir, predicateFind, sortedIndex) {\n return function(array, item, idx) {\n var i = 0, length = getLength(array);\n if (typeof idx == 'number') {\n if (dir > 0) {\n i = idx >= 0 ? idx : Math.max(idx + length, i);\n } else {\n length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n }\n } else if (sortedIndex && idx && length) {\n idx = sortedIndex(array, item);\n return array[idx] === item ? idx : -1;\n }\n if (item !== item) {\n idx = predicateFind(slice.call(array, i, length), isNaN);\n return idx >= 0 ? idx + i : -1;\n }\n for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n if (array[idx] === item) return idx;\n }\n return -1;\n };\n}\n","import sortedIndex from './sortedIndex.js';\nimport findIndex from './findIndex.js';\nimport createIndexFinder from './_createIndexFinder.js';\n\n// Return the position of the first occurrence of an item in an array,\n// or -1 if the item is not included in the array.\n// If the array is large and already in sort order, pass `true`\n// for **isSorted** to use binary search.\nexport default createIndexFinder(1, findIndex, sortedIndex);\n","import findLastIndex from './findLastIndex.js';\nimport createIndexFinder from './_createIndexFinder.js';\n\n// Return the position of the last occurrence of an item in an array,\n// or -1 if the item is not included in the array.\nexport default createIndexFinder(-1, findLastIndex);\n","import isArrayLike from './_isArrayLike.js';\nimport findIndex from './findIndex.js';\nimport findKey from './findKey.js';\n\n// Return the first value which passes a truth test.\nexport default function find(obj, predicate, context) {\n var keyFinder = isArrayLike(obj) ? findIndex : findKey;\n var key = keyFinder(obj, predicate, context);\n if (key !== void 0 && key !== -1) return obj[key];\n}\n","import find from './find.js';\nimport matcher from './matcher.js';\n\n// Convenience version of a common use case of `_.find`: getting the first\n// object containing specific `key:value` pairs.\nexport default function findWhere(obj, attrs) {\n return find(obj, matcher(attrs));\n}\n","import optimizeCb from './_optimizeCb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// The cornerstone for collection functions, an `each`\n// implementation, aka `forEach`.\n// Handles raw objects in addition to array-likes. Treats all\n// sparse array-likes as if they were dense.\nexport default function each(obj, iteratee, context) {\n iteratee = optimizeCb(iteratee, context);\n var i, length;\n if (isArrayLike(obj)) {\n for (i = 0, length = obj.length; i < length; i++) {\n iteratee(obj[i], i, obj);\n }\n } else {\n var _keys = keys(obj);\n for (i = 0, length = _keys.length; i < length; i++) {\n iteratee(obj[_keys[i]], _keys[i], obj);\n }\n }\n return obj;\n}\n","import cb from './_cb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Return the results of applying the iteratee to each element.\nexport default function map(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length,\n results = Array(length);\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n results[index] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\nimport optimizeCb from './_optimizeCb.js';\n\n// Internal helper to create a reducing function, iterating left or right.\nexport default function createReduce(dir) {\n // Wrap code that reassigns argument variables in a separate function than\n // the one that accesses `arguments.length` to avoid a perf hit. (#1991)\n var reducer = function(obj, iteratee, memo, initial) {\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length,\n index = dir > 0 ? 0 : length - 1;\n if (!initial) {\n memo = obj[_keys ? _keys[index] : index];\n index += dir;\n }\n for (; index >= 0 && index < length; index += dir) {\n var currentKey = _keys ? _keys[index] : index;\n memo = iteratee(memo, obj[currentKey], currentKey, obj);\n }\n return memo;\n };\n\n return function(obj, iteratee, memo, context) {\n var initial = arguments.length >= 3;\n return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);\n };\n}\n","import createReduce from './_createReduce.js';\n\n// **Reduce** builds up a single result from a list of values, aka `inject`,\n// or `foldl`.\nexport default createReduce(1);\n","import createReduce from './_createReduce.js';\n\n// The right-associative version of reduce, also known as `foldr`.\nexport default createReduce(-1);\n","import cb from './_cb.js';\nimport each from './each.js';\n\n// Return all the elements that pass a truth test.\nexport default function filter(obj, predicate, context) {\n var results = [];\n predicate = cb(predicate, context);\n each(obj, function(value, index, list) {\n if (predicate(value, index, list)) results.push(value);\n });\n return results;\n}\n","import filter from './filter.js';\nimport negate from './negate.js';\nimport cb from './_cb.js';\n\n// Return all the elements for which a truth test fails.\nexport default function reject(obj, predicate, context) {\n return filter(obj, negate(cb(predicate)), context);\n}\n","import cb from './_cb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Determine whether all of the elements pass a truth test.\nexport default function every(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n if (!predicate(obj[currentKey], currentKey, obj)) return false;\n }\n return true;\n}\n","import cb from './_cb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Determine if at least one element in the object passes a truth test.\nexport default function some(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n if (predicate(obj[currentKey], currentKey, obj)) return true;\n }\n return false;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport indexOf from './indexOf.js';\n\n// Determine if the array or object contains a given item (using `===`).\nexport default function contains(obj, item, fromIndex, guard) {\n if (!isArrayLike(obj)) obj = values(obj);\n if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n return indexOf(obj, item, fromIndex) >= 0;\n}\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport map from './map.js';\nimport deepGet from './_deepGet.js';\nimport toPath from './_toPath.js';\n\n// Invoke a method (with arguments) on every item in a collection.\nexport default restArguments(function(obj, path, args) {\n var contextPath, func;\n if (isFunction(path)) {\n func = path;\n } else {\n path = toPath(path);\n contextPath = path.slice(0, -1);\n path = path[path.length - 1];\n }\n return map(obj, function(context) {\n var method = func;\n if (!method) {\n if (contextPath && contextPath.length) {\n context = deepGet(context, contextPath);\n }\n if (context == null) return void 0;\n method = context[path];\n }\n return method == null ? method : method.apply(context, args);\n });\n});\n","import map from './map.js';\nimport property from './property.js';\n\n// Convenience version of a common use case of `_.map`: fetching a property.\nexport default function pluck(obj, key) {\n return map(obj, property(key));\n}\n","import filter from './filter.js';\nimport matcher from './matcher.js';\n\n// Convenience version of a common use case of `_.filter`: selecting only\n// objects containing specific `key:value` pairs.\nexport default function where(obj, attrs) {\n return filter(obj, matcher(attrs));\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport cb from './_cb.js';\nimport each from './each.js';\n\n// Return the maximum element (or element-based computation).\nexport default function max(obj, iteratee, context) {\n var result = -Infinity, lastComputed = -Infinity,\n value, computed;\n if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) {\n obj = isArrayLike(obj) ? obj : values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value > result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed > lastComputed || (computed === -Infinity && result === -Infinity)) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport cb from './_cb.js';\nimport each from './each.js';\n\n// Return the minimum element (or element-based computation).\nexport default function min(obj, iteratee, context) {\n var result = Infinity, lastComputed = Infinity,\n value, computed;\n if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) {\n obj = isArrayLike(obj) ? obj : values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value < result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed < lastComputed || (computed === Infinity && result === Infinity)) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n}\n","import isArray from './isArray.js';\nimport { slice } from './_setup.js';\nimport isString from './isString.js';\nimport isArrayLike from './_isArrayLike.js';\nimport map from './map.js';\nimport identity from './identity.js';\nimport values from './values.js';\n\n// Safely create a real, live array from anything iterable.\nvar reStrSymbol = /[^\\ud800-\\udfff]|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff]/g;\nexport default function toArray(obj) {\n if (!obj) return [];\n if (isArray(obj)) return slice.call(obj);\n if (isString(obj)) {\n // Keep surrogate pair characters together.\n return obj.match(reStrSymbol);\n }\n if (isArrayLike(obj)) return map(obj, identity);\n return values(obj);\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport getLength from './_getLength.js';\nimport random from './random.js';\nimport toArray from './toArray.js';\n\n// Sample **n** random values from a collection using the modern version of the\n// [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n// If **n** is not specified, returns a single random element.\n// The internal `guard` argument allows it to work with `_.map`.\nexport default function sample(obj, n, guard) {\n if (n == null || guard) {\n if (!isArrayLike(obj)) obj = values(obj);\n return obj[random(obj.length - 1)];\n }\n var sample = toArray(obj);\n var length = getLength(sample);\n n = Math.max(Math.min(n, length), 0);\n var last = length - 1;\n for (var index = 0; index < n; index++) {\n var rand = random(index, last);\n var temp = sample[index];\n sample[index] = sample[rand];\n sample[rand] = temp;\n }\n return sample.slice(0, n);\n}\n","import sample from './sample.js';\n\n// Shuffle a collection.\nexport default function shuffle(obj) {\n return sample(obj, Infinity);\n}\n","import cb from './_cb.js';\nimport pluck from './pluck.js';\nimport map from './map.js';\n\n// Sort the object's values by a criterion produced by an iteratee.\nexport default function sortBy(obj, iteratee, context) {\n var index = 0;\n iteratee = cb(iteratee, context);\n return pluck(map(obj, function(value, key, list) {\n return {\n value: value,\n index: index++,\n criteria: iteratee(value, key, list)\n };\n }).sort(function(left, right) {\n var a = left.criteria;\n var b = right.criteria;\n if (a !== b) {\n if (a > b || a === void 0) return 1;\n if (a < b || b === void 0) return -1;\n }\n return left.index - right.index;\n }), 'value');\n}\n","import cb from './_cb.js';\nimport each from './each.js';\n\n// An internal function used for aggregate \"group by\" operations.\nexport default function group(behavior, partition) {\n return function(obj, iteratee, context) {\n var result = partition ? [[], []] : {};\n iteratee = cb(iteratee, context);\n each(obj, function(value, index) {\n var key = iteratee(value, index, obj);\n behavior(result, value, key);\n });\n return result;\n };\n}\n","import group from './_group.js';\nimport has from './_has.js';\n\n// Groups the object's values by a criterion. Pass either a string attribute\n// to group by, or a function that returns the criterion.\nexport default group(function(result, value, key) {\n if (has(result, key)) result[key].push(value); else result[key] = [value];\n});\n","import group from './_group.js';\n\n// Indexes the object's values by a criterion, similar to `_.groupBy`, but for\n// when you know that your index values will be unique.\nexport default group(function(result, value, key) {\n result[key] = value;\n});\n","import group from './_group.js';\nimport has from './_has.js';\n\n// Counts instances of an object that group by a certain criterion. Pass\n// either a string attribute to count by, or a function that returns the\n// criterion.\nexport default group(function(result, value, key) {\n if (has(result, key)) result[key]++; else result[key] = 1;\n});\n","import group from './_group.js';\n\n// Split a collection into two arrays: one whose elements all pass the given\n// truth test, and one whose elements all do not pass the truth test.\nexport default group(function(result, value, pass) {\n result[pass ? 0 : 1].push(value);\n}, true);\n","import isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Return the number of elements in a collection.\nexport default function size(obj) {\n if (obj == null) return 0;\n return isArrayLike(obj) ? obj.length : keys(obj).length;\n}\n","// Internal `_.pick` helper function to determine whether `key` is an enumerable\n// property name of `obj`.\nexport default function keyInObj(value, key, obj) {\n return key in obj;\n}\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport optimizeCb from './_optimizeCb.js';\nimport allKeys from './allKeys.js';\nimport keyInObj from './_keyInObj.js';\nimport flatten from './_flatten.js';\n\n// Return a copy of the object only containing the allowed properties.\nexport default restArguments(function(obj, keys) {\n var result = {}, iteratee = keys[0];\n if (obj == null) return result;\n if (isFunction(iteratee)) {\n if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);\n keys = allKeys(obj);\n } else {\n iteratee = keyInObj;\n keys = flatten(keys, false, false);\n obj = Object(obj);\n }\n for (var i = 0, length = keys.length; i < length; i++) {\n var key = keys[i];\n var value = obj[key];\n if (iteratee(value, key, obj)) result[key] = value;\n }\n return result;\n});\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport negate from './negate.js';\nimport map from './map.js';\nimport flatten from './_flatten.js';\nimport contains from './contains.js';\nimport pick from './pick.js';\n\n// Return a copy of the object without the disallowed properties.\nexport default restArguments(function(obj, keys) {\n var iteratee = keys[0], context;\n if (isFunction(iteratee)) {\n iteratee = negate(iteratee);\n if (keys.length > 1) context = keys[1];\n } else {\n keys = map(flatten(keys, false, false), String);\n iteratee = function(value, key) {\n return !contains(keys, key);\n };\n }\n return pick(obj, iteratee, context);\n});\n","import { slice } from './_setup.js';\n\n// Returns everything but the last entry of the array. Especially useful on\n// the arguments object. Passing **n** will return all the values in\n// the array, excluding the last N.\nexport default function initial(array, n, guard) {\n return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n}\n","import initial from './initial.js';\n\n// Get the first element of an array. Passing **n** will return the first N\n// values in the array. The **guard** check allows it to work with `_.map`.\nexport default function first(array, n, guard) {\n if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n if (n == null || guard) return array[0];\n return initial(array, array.length - n);\n}\n","import { slice } from './_setup.js';\n\n// Returns everything but the first entry of the `array`. Especially useful on\n// the `arguments` object. Passing an **n** will return the rest N values in the\n// `array`.\nexport default function rest(array, n, guard) {\n return slice.call(array, n == null || guard ? 1 : n);\n}\n","import rest from './rest.js';\n\n// Get the last element of an array. Passing **n** will return the last N\n// values in the array.\nexport default function last(array, n, guard) {\n if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n if (n == null || guard) return array[array.length - 1];\n return rest(array, Math.max(0, array.length - n));\n}\n","import filter from './filter.js';\n\n// Trim out all falsy values from an array.\nexport default function compact(array) {\n return filter(array, Boolean);\n}\n","import _flatten from './_flatten.js';\n\n// Flatten out an array, either recursively (by default), or up to `depth`.\n// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively.\nexport default function flatten(array, depth) {\n return _flatten(array, depth, false);\n}\n","import restArguments from './restArguments.js';\nimport flatten from './_flatten.js';\nimport filter from './filter.js';\nimport contains from './contains.js';\n\n// Take the difference between one array and a number of other arrays.\n// Only the elements present in just the first array will remain.\nexport default restArguments(function(array, rest) {\n rest = flatten(rest, true, true);\n return filter(array, function(value){\n return !contains(rest, value);\n });\n});\n","import restArguments from './restArguments.js';\nimport difference from './difference.js';\n\n// Return a version of the array that does not contain the specified value(s).\nexport default restArguments(function(array, otherArrays) {\n return difference(array, otherArrays);\n});\n","import isBoolean from './isBoolean.js';\nimport cb from './_cb.js';\nimport getLength from './_getLength.js';\nimport contains from './contains.js';\n\n// Produce a duplicate-free version of the array. If the array has already\n// been sorted, you have the option of using a faster algorithm.\n// The faster algorithm will not work with an iteratee if the iteratee\n// is not a one-to-one function, so providing an iteratee will disable\n// the faster algorithm.\nexport default function uniq(array, isSorted, iteratee, context) {\n if (!isBoolean(isSorted)) {\n context = iteratee;\n iteratee = isSorted;\n isSorted = false;\n }\n if (iteratee != null) iteratee = cb(iteratee, context);\n var result = [];\n var seen = [];\n for (var i = 0, length = getLength(array); i < length; i++) {\n var value = array[i],\n computed = iteratee ? iteratee(value, i, array) : value;\n if (isSorted && !iteratee) {\n if (!i || seen !== computed) result.push(value);\n seen = computed;\n } else if (iteratee) {\n if (!contains(seen, computed)) {\n seen.push(computed);\n result.push(value);\n }\n } else if (!contains(result, value)) {\n result.push(value);\n }\n }\n return result;\n}\n","import restArguments from './restArguments.js';\nimport uniq from './uniq.js';\nimport flatten from './_flatten.js';\n\n// Produce an array that contains the union: each distinct element from all of\n// the passed-in arrays.\nexport default restArguments(function(arrays) {\n return uniq(flatten(arrays, true, true));\n});\n","import getLength from './_getLength.js';\nimport contains from './contains.js';\n\n// Produce an array that contains every item shared between all the\n// passed-in arrays.\nexport default function intersection(array) {\n var result = [];\n var argsLength = arguments.length;\n for (var i = 0, length = getLength(array); i < length; i++) {\n var item = array[i];\n if (contains(result, item)) continue;\n var j;\n for (j = 1; j < argsLength; j++) {\n if (!contains(arguments[j], item)) break;\n }\n if (j === argsLength) result.push(item);\n }\n return result;\n}\n","import max from './max.js';\nimport getLength from './_getLength.js';\nimport pluck from './pluck.js';\n\n// Complement of zip. Unzip accepts an array of arrays and groups\n// each array's elements on shared indices.\nexport default function unzip(array) {\n var length = (array && max(array, getLength).length) || 0;\n var result = Array(length);\n\n for (var index = 0; index < length; index++) {\n result[index] = pluck(array, index);\n }\n return result;\n}\n","import restArguments from './restArguments.js';\nimport unzip from './unzip.js';\n\n// Zip together multiple lists into a single array -- elements that share\n// an index go together.\nexport default restArguments(unzip);\n","import getLength from './_getLength.js';\n\n// Converts lists into objects. Pass either a single array of `[key, value]`\n// pairs, or two parallel arrays of the same length -- one of keys, and one of\n// the corresponding values. Passing by pairs is the reverse of `_.pairs`.\nexport default function object(list, values) {\n var result = {};\n for (var i = 0, length = getLength(list); i < length; i++) {\n if (values) {\n result[list[i]] = values[i];\n } else {\n result[list[i][0]] = list[i][1];\n }\n }\n return result;\n}\n","// Generate an integer Array containing an arithmetic progression. A port of\n// the native Python `range()` function. See\n// [the Python documentation](https://docs.python.org/library/functions.html#range).\nexport default function range(start, stop, step) {\n if (stop == null) {\n stop = start || 0;\n start = 0;\n }\n if (!step) {\n step = stop < start ? -1 : 1;\n }\n\n var length = Math.max(Math.ceil((stop - start) / step), 0);\n var range = Array(length);\n\n for (var idx = 0; idx < length; idx++, start += step) {\n range[idx] = start;\n }\n\n return range;\n}\n","import { slice } from './_setup.js';\n\n// Chunk a single array into multiple arrays, each containing `count` or fewer\n// items.\nexport default function chunk(array, count) {\n if (count == null || count < 1) return [];\n var result = [];\n var i = 0, length = array.length;\n while (i < length) {\n result.push(slice.call(array, i, i += count));\n }\n return result;\n}\n","import _ from './underscore.js';\n\n// Helper function to continue chaining intermediate results.\nexport default function chainResult(instance, obj) {\n return instance._chain ? _(obj).chain() : obj;\n}\n","import _ from './underscore.js';\nimport each from './each.js';\nimport functions from './functions.js';\nimport { push } from './_setup.js';\nimport chainResult from './_chainResult.js';\n\n// Add your own custom functions to the Underscore object.\nexport default function mixin(obj) {\n each(functions(obj), function(name) {\n var func = _[name] = obj[name];\n _.prototype[name] = function() {\n var args = [this._wrapped];\n push.apply(args, arguments);\n return chainResult(this, func.apply(_, args));\n };\n });\n return _;\n}\n","import _ from './underscore.js';\nimport each from './each.js';\nimport { ArrayProto } from './_setup.js';\nimport chainResult from './_chainResult.js';\n\n// Add all mutator `Array` functions to the wrapper.\neach(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n if (obj != null) {\n method.apply(obj, arguments);\n if ((name === 'shift' || name === 'splice') && obj.length === 0) {\n delete obj[0];\n }\n }\n return chainResult(this, obj);\n };\n});\n\n// Add all accessor `Array` functions to the wrapper.\neach(['concat', 'join', 'slice'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n if (obj != null) obj = method.apply(obj, arguments);\n return chainResult(this, obj);\n };\n});\n\nexport default _;\n","// Named Exports\n// =============\n\n// Underscore.js 1.13.3\n// https://underscorejs.org\n// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors\n// Underscore may be freely distributed under the MIT license.\n\n// Baseline setup.\nexport { VERSION } from './_setup.js';\nexport { default as restArguments } from './restArguments.js';\n\n// Object Functions\n// ----------------\n// Our most fundamental functions operate on any JavaScript object.\n// Most functions in Underscore depend on at least one function in this section.\n\n// A group of functions that check the types of core JavaScript values.\n// These are often informally referred to as the \"isType\" functions.\nexport { default as isObject } from './isObject.js';\nexport { default as isNull } from './isNull.js';\nexport { default as isUndefined } from './isUndefined.js';\nexport { default as isBoolean } from './isBoolean.js';\nexport { default as isElement } from './isElement.js';\nexport { default as isString } from './isString.js';\nexport { default as isNumber } from './isNumber.js';\nexport { default as isDate } from './isDate.js';\nexport { default as isRegExp } from './isRegExp.js';\nexport { default as isError } from './isError.js';\nexport { default as isSymbol } from './isSymbol.js';\nexport { default as isArrayBuffer } from './isArrayBuffer.js';\nexport { default as isDataView } from './isDataView.js';\nexport { default as isArray } from './isArray.js';\nexport { default as isFunction } from './isFunction.js';\nexport { default as isArguments } from './isArguments.js';\nexport { default as isFinite } from './isFinite.js';\nexport { default as isNaN } from './isNaN.js';\nexport { default as isTypedArray } from './isTypedArray.js';\nexport { default as isEmpty } from './isEmpty.js';\nexport { default as isMatch } from './isMatch.js';\nexport { default as isEqual } from './isEqual.js';\nexport { default as isMap } from './isMap.js';\nexport { default as isWeakMap } from './isWeakMap.js';\nexport { default as isSet } from './isSet.js';\nexport { default as isWeakSet } from './isWeakSet.js';\n\n// Functions that treat an object as a dictionary of key-value pairs.\nexport { default as keys } from './keys.js';\nexport { default as allKeys } from './allKeys.js';\nexport { default as values } from './values.js';\nexport { default as pairs } from './pairs.js';\nexport { default as invert } from './invert.js';\nexport { default as functions,\n default as methods } from './functions.js';\nexport { default as extend } from './extend.js';\nexport { default as extendOwn,\n default as assign } from './extendOwn.js';\nexport { default as defaults } from './defaults.js';\nexport { default as create } from './create.js';\nexport { default as clone } from './clone.js';\nexport { default as tap } from './tap.js';\nexport { default as get } from './get.js';\nexport { default as has } from './has.js';\nexport { default as mapObject } from './mapObject.js';\n\n// Utility Functions\n// -----------------\n// A bit of a grab bag: Predicate-generating functions for use with filters and\n// loops, string escaping and templating, create random numbers and unique ids,\n// and functions that facilitate Underscore's chaining and iteration conventions.\nexport { default as identity } from './identity.js';\nexport { default as constant } from './constant.js';\nexport { default as noop } from './noop.js';\nexport { default as toPath } from './toPath.js';\nexport { default as property } from './property.js';\nexport { default as propertyOf } from './propertyOf.js';\nexport { default as matcher,\n default as matches } from './matcher.js';\nexport { default as times } from './times.js';\nexport { default as random } from './random.js';\nexport { default as now } from './now.js';\nexport { default as escape } from './escape.js';\nexport { default as unescape } from './unescape.js';\nexport { default as templateSettings } from './templateSettings.js';\nexport { default as template } from './template.js';\nexport { default as result } from './result.js';\nexport { default as uniqueId } from './uniqueId.js';\nexport { default as chain } from './chain.js';\nexport { default as iteratee } from './iteratee.js';\n\n// Function (ahem) Functions\n// -------------------------\n// These functions take a function as an argument and return a new function\n// as the result. Also known as higher-order functions.\nexport { default as partial } from './partial.js';\nexport { default as bind } from './bind.js';\nexport { default as bindAll } from './bindAll.js';\nexport { default as memoize } from './memoize.js';\nexport { default as delay } from './delay.js';\nexport { default as defer } from './defer.js';\nexport { default as throttle } from './throttle.js';\nexport { default as debounce } from './debounce.js';\nexport { default as wrap } from './wrap.js';\nexport { default as negate } from './negate.js';\nexport { default as compose } from './compose.js';\nexport { default as after } from './after.js';\nexport { default as before } from './before.js';\nexport { default as once } from './once.js';\n\n// Finders\n// -------\n// Functions that extract (the position of) a single element from an object\n// or array based on some criterion.\nexport { default as findKey } from './findKey.js';\nexport { default as findIndex } from './findIndex.js';\nexport { default as findLastIndex } from './findLastIndex.js';\nexport { default as sortedIndex } from './sortedIndex.js';\nexport { default as indexOf } from './indexOf.js';\nexport { default as lastIndexOf } from './lastIndexOf.js';\nexport { default as find,\n default as detect } from './find.js';\nexport { default as findWhere } from './findWhere.js';\n\n// Collection Functions\n// --------------------\n// Functions that work on any collection of elements: either an array, or\n// an object of key-value pairs.\nexport { default as each,\n default as forEach } from './each.js';\nexport { default as map,\n default as collect } from './map.js';\nexport { default as reduce,\n default as foldl,\n default as inject } from './reduce.js';\nexport { default as reduceRight,\n default as foldr } from './reduceRight.js';\nexport { default as filter,\n default as select } from './filter.js';\nexport { default as reject } from './reject.js';\nexport { default as every,\n default as all } from './every.js';\nexport { default as some,\n default as any } from './some.js';\nexport { default as contains,\n default as includes,\n default as include } from './contains.js';\nexport { default as invoke } from './invoke.js';\nexport { default as pluck } from './pluck.js';\nexport { default as where } from './where.js';\nexport { default as max } from './max.js';\nexport { default as min } from './min.js';\nexport { default as shuffle } from './shuffle.js';\nexport { default as sample } from './sample.js';\nexport { default as sortBy } from './sortBy.js';\nexport { default as groupBy } from './groupBy.js';\nexport { default as indexBy } from './indexBy.js';\nexport { default as countBy } from './countBy.js';\nexport { default as partition } from './partition.js';\nexport { default as toArray } from './toArray.js';\nexport { default as size } from './size.js';\n\n// `_.pick` and `_.omit` are actually object functions, but we put\n// them here in order to create a more natural reading order in the\n// monolithic build as they depend on `_.contains`.\nexport { default as pick } from './pick.js';\nexport { default as omit } from './omit.js';\n\n// Array Functions\n// ---------------\n// Functions that operate on arrays (and array-likes) only, because they’re\n// expressed in terms of operations on an ordered list of values.\nexport { default as first,\n default as head,\n default as take } from './first.js';\nexport { default as initial } from './initial.js';\nexport { default as last } from './last.js';\nexport { default as rest,\n default as tail,\n default as drop } from './rest.js';\nexport { default as compact } from './compact.js';\nexport { default as flatten } from './flatten.js';\nexport { default as without } from './without.js';\nexport { default as uniq,\n default as unique } from './uniq.js';\nexport { default as union } from './union.js';\nexport { default as intersection } from './intersection.js';\nexport { default as difference } from './difference.js';\nexport { default as unzip,\n default as transpose } from './unzip.js';\nexport { default as zip } from './zip.js';\nexport { default as object } from './object.js';\nexport { default as range } from './range.js';\nexport { default as chunk } from './chunk.js';\n\n// OOP\n// ---\n// These modules support the \"object-oriented\" calling style. See also\n// `underscore.js` and `index-default.js`.\nexport { default as mixin } from './mixin.js';\nexport { default } from './underscore-array-methods.js';\n","// Default Export\n// ==============\n// In this module, we mix our bundled exports into the `_` object and export\n// the result. This is analogous to setting `module.exports = _` in CommonJS.\n// Hence, this module is also the entry point of our UMD bundle and the package\n// entry point for CommonJS and AMD users. In other words, this is (the source\n// of) the module you are interfacing with when you do any of the following:\n//\n// ```js\n// // CommonJS\n// var _ = require('underscore');\n//\n// // AMD\n// define(['underscore'], function(_) {...});\n//\n// // UMD in the browser\n// // _ is available as a global variable\n// ```\nimport * as allExports from './index.js';\nimport { mixin } from './index.js';\n\n// Add all of the Underscore functions to the wrapper object.\nvar _ = mixin(allExports);\n// Legacy Node.js API.\n_._ = _;\n// Export the Underscore API.\nexport default _;\n","import _ from \"underscore\";\n\nfunction getMatrixSize(matrix: ReadonlyArray<ReadonlyArray<number>>) {\n const matrixSize = [1, 1];\n\n // We need to find the widest row and tallest column to get the correct\n // matrix size.\n _(matrix).each((matrixRow, row) => {\n let rowWidth = 0;\n _(matrixRow).each((matrixCol, col) => {\n if (matrixCol != null && matrixCol.toString().length) {\n rowWidth = col + 1;\n }\n });\n\n // Matrix width:\n matrixSize[1] = Math.max(matrixSize[1], rowWidth);\n\n // Matrix height:\n if (rowWidth > 0) {\n matrixSize[0] = Math.max(matrixSize[0], row + 1);\n }\n });\n return matrixSize;\n}\n\nexport default getMatrixSize;\n","/**\n * Get the character used for separating decimals.\n */\nconst getDecimalSeparator = (locale: string): string => {\n switch (locale) {\n // TODO(somewhatabstract): Remove this when Chrome supports the `ka`\n // locale properly.\n // https://github.com/formatjs/formatjs/issues/1526#issuecomment-559891201\n //\n // Supported locales in Chrome:\n // https://source.chromium.org/chromium/chromium/src/+/master:third_party/icu/scripts/chrome_ui_languages.list\n case \"ka\":\n return \",\";\n\n default:\n const numberWithDecimalSeparator = 1.1;\n // TODO(FEI-3647): Update to use .formatToParts() once we no longer have to\n // support Safari 12.\n const match = new Intl.NumberFormat(locale)\n .format(numberWithDecimalSeparator)\n // 0x661 is ARABIC-INDIC DIGIT ONE\n // 0x6F1 is EXTENDED ARABIC-INDIC DIGIT ONE\n .match(/[^\\d\\u0661\\u06F1]/);\n return match?.[0] ?? \".\";\n }\n};\n\nexport default getDecimalSeparator;\n","import _ from \"underscore\";\n\n/**\n * APPROXIMATE equality on numbers and primitives.\n */\nexport function approximateEqual<T>(x: T, y: T): boolean {\n if (typeof x === \"number\" && typeof y === \"number\") {\n return Math.abs(x - y) < 1e-9;\n }\n return x === y;\n}\n\n/**\n * Deep APPROXIMATE equality on primitives, numbers, arrays, and objects.\n * Recursive.\n */\nexport function approximateDeepEqual<T>(x: T, y: T): boolean {\n if (Array.isArray(x) && Array.isArray(y)) {\n if (x.length !== y.length) {\n return false;\n }\n for (let i = 0; i < x.length; i++) {\n if (!approximateDeepEqual(x[i], y[i])) {\n return false;\n }\n }\n return true;\n }\n if (Array.isArray(x) || Array.isArray(y)) {\n return false;\n }\n if (typeof x === \"function\" && typeof y === \"function\") {\n return approximateEqual(x, y);\n }\n if (typeof x === \"function\" || typeof y === \"function\") {\n return false;\n }\n if (typeof x === \"object\" && typeof y === \"object\" && !!x && !!y) {\n return (\n x === y ||\n (_.all(x, function (v, k) {\n // @ts-expect-error - TS2536 - Type 'CollectionKey<T>' cannot be used to index type 'T'.\n return approximateDeepEqual(y[k], v);\n }) &&\n _.all(y, function (v, k) {\n // @ts-expect-error - TS2536 - Type 'CollectionKey<T>' cannot be used to index type 'T'.\n return approximateDeepEqual(x[k], v);\n }))\n );\n }\n if ((typeof x === \"object\" && !!x) || (typeof y === \"object\" && !!y)) {\n return false;\n }\n return approximateEqual(x, y);\n}\n","import type {PerseusWidgetsMap} from \"../data-schema\";\n\n/**\n * Add a widget placeholder using the widget ID.\n * ex. addWidget(\"radio 1\") => \"[[☃ radio 1]]\"\n *\n * @param {string} id\n * @returns {string}\n */\nexport function addWidget(id: string): string {\n return `[[☃ ${id}]]`;\n}\n\n/**\n * Regex for widget placeholders in a string.\n *\n * First capture group is the widget ID (ex. 'radio 1')\n * Second capture group is the widget type (ex. \"radio)\n * exec return will look like: ['[[☃ radio 1]]', 'radio 1', 'radio']\n */\nexport function getWidgetRegex() {\n return /\\[\\[☃ ([A-Za-z0-9- ]+)\\]\\]/g;\n}\n\n/**\n * Extract all widget IDs, which includes the widget type and instance number.\n * example output: ['radio 1', 'categorizer 1', 'categorizor 2']\n *\n * Content should contain Perseus widget placeholders,\n * which look like: '[[☃ radio 1]]'.\n *\n * @param {string} content\n * @returns {ReadonlyArray<string>} widgetIds\n */\nexport function getWidgetIdsFromContent(\n content: string,\n): ReadonlyArray<string> {\n const widgets: Array<string> = [];\n const localWidgetRegex = getWidgetRegex();\n\n let match = localWidgetRegex.exec(content);\n\n while (match !== null) {\n widgets.push(match[1]);\n match = localWidgetRegex.exec(content);\n }\n\n return widgets;\n}\n\n/**\n * Get a list of widget IDs from content,\n * but only for specific widget types\n *\n * @param {string} type the type of widget (ie \"radio\")\n * @param {string} content the string to parse\n * @param {PerseusWidgetsMap} widgetMap widget ID to widget map\n * @returns {ReadonlyArray<string>} the widget type (ie \"radio\")\n */\nexport function getWidgetIdsFromContentByType(\n type: string,\n content: string,\n widgetMap: PerseusWidgetsMap,\n): ReadonlyArray<string> {\n const rv: Array<string> = [];\n const widgetIdsInContent = getWidgetIdsFromContent(content);\n widgetIdsInContent.forEach((widgetId) => {\n const widget = widgetMap[widgetId];\n if (widget?.type === type) {\n rv.push(widgetId);\n }\n });\n return rv;\n}\n","// TODO(benchristel): in the future, we may want to make deepClone work for\n// Record<string, Cloneable> as well. Currently, it only does arrays.\ntype Cloneable =\n | null\n | undefined\n | boolean\n | string\n | number\n | Cloneable[]\n | readonly Cloneable[];\nfunction deepClone<T extends Cloneable>(obj: T): T {\n if (Array.isArray(obj)) {\n return obj.map(deepClone) as T;\n }\n return obj;\n}\n\nexport default deepClone;\n","import _ from \"underscore\";\n\nimport {approximateDeepEqual} from \"./equality\";\n\nimport type {\n LinearType,\n QuadraticType,\n SinusoidType,\n TangentType,\n ExponentialType,\n LogarithmType,\n AbsoluteValueType,\n Coords,\n} from \"./grapher-types\";\nimport type {Coord} from \"../data-schema\";\n\nexport const MOVABLES = {\n PLOT: \"PLOT\",\n PARABOLA: \"PARABOLA\",\n SINUSOID: \"SINUSOID\",\n};\n\n// TODO(charlie): These really need to go into a utility file as they're being\n// used by both interactive-graph and now grapher.\nfunction canonicalSineCoefficients(coeffs: any) {\n // For a curve of the form f(x) = a * Sin(b * x - c) + d,\n // this function ensures that a, b > 0, and c is its\n // smallest possible positive value.\n let amplitude = coeffs[0];\n let angularFrequency = coeffs[1];\n let phase = coeffs[2];\n const verticalOffset = coeffs[3];\n\n // Guarantee a > 0\n if (amplitude < 0) {\n amplitude *= -1;\n angularFrequency *= -1;\n phase *= -1;\n }\n\n const period = 2 * Math.PI;\n // Guarantee b > 0\n if (angularFrequency < 0) {\n angularFrequency *= -1;\n phase *= -1;\n phase += period / 2;\n }\n\n // Guarantee c is smallest possible positive value\n while (phase > 0) {\n phase -= period;\n }\n while (phase < 0) {\n phase += period;\n }\n\n return [amplitude, angularFrequency, phase, verticalOffset];\n}\n\nfunction canonicalTangentCoefficients(coeffs: any) {\n // For a curve of the form f(x) = a * Tan(b * x - c) + d,\n // this function ensures that a, b > 0, and c is its\n // smallest possible positive value.\n let amplitude = coeffs[0];\n let angularFrequency = coeffs[1];\n let phase = coeffs[2];\n const verticalOffset = coeffs[3];\n\n // Guarantee a > 0\n if (amplitude < 0) {\n amplitude *= -1;\n angularFrequency *= -1;\n phase *= -1;\n }\n\n const period = Math.PI;\n // Guarantee b > 0\n if (angularFrequency < 0) {\n angularFrequency *= -1;\n phase *= -1;\n phase += period / 2;\n }\n\n // Guarantee c is smallest possible positive value\n while (phase > 0) {\n phase -= period;\n }\n while (phase < 0) {\n phase += period;\n }\n\n return [amplitude, angularFrequency, phase, verticalOffset];\n}\n\nconst PlotDefaults = {\n areEqual: function (\n coeffs1: ReadonlyArray<number>,\n coeffs2: ReadonlyArray<number>,\n ): boolean {\n return approximateDeepEqual(coeffs1, coeffs2);\n },\n movable: MOVABLES.PLOT,\n getPropsForCoeffs: function (coeffs: ReadonlyArray<number>): {fn: any} {\n return {\n // @ts-expect-error - TS2339 - Property 'getFunctionForCoeffs' does not exist on type '{ readonly areEqual: (coeffs1: any, coeffs2: any) => boolean; readonly Movable: any; readonly getPropsForCoeffs: (coeffs: any) => any; }'.\n fn: _.partial(this.getFunctionForCoeffs, coeffs),\n };\n },\n} as const;\n\nconst Linear: LinearType = _.extend({}, PlotDefaults, {\n url: \"https://ka-perseus-graphie.s3.amazonaws.com/67aaf581e6d9ef9038c10558a1f70ac21c11c9f8.png\",\n\n defaultCoords: [\n [0.25, 0.75],\n [0.75, 0.75],\n ],\n\n getCoefficients: function (\n coords: Coords,\n ): ReadonlyArray<number> | undefined {\n const p1 = coords[0];\n const p2 = coords[1];\n\n const denom = p2[0] - p1[0];\n const num = p2[1] - p1[1];\n\n if (denom === 0) {\n return;\n }\n\n const m = num / denom;\n const b = p2[1] - m * p2[0];\n return [m, b];\n },\n\n getFunctionForCoeffs: function (coeffs: ReadonlyArray<number>, x: number) {\n const m = coeffs[0];\n const b = coeffs[1];\n return m * x + b;\n },\n\n getEquationString: function (coords: Coords) {\n const coeffs: ReadonlyArray<number> = this.getCoefficients(coords);\n const m: number = coeffs[0];\n const b: number = coeffs[1];\n return \"y = \" + m.toFixed(3) + \"x + \" + b.toFixed(3);\n },\n});\n\nconst Quadratic: QuadraticType = _.extend({}, PlotDefaults, {\n url: \"https://ka-perseus-graphie.s3.amazonaws.com/e23d36e6fc29ee37174e92c9daba2a66677128ab.png\",\n\n defaultCoords: [\n [0.5, 0.5],\n [0.75, 0.75],\n ],\n movable: MOVABLES.PARABOLA,\n\n getCoefficients: function (coords: Coords): ReadonlyArray<number> {\n const p1 = coords[0];\n const p2 = coords[1];\n\n // Parabola with vertex (h, k) has form: y = a * (h - k)^2 + k\n const h = p1[0];\n const k = p1[1];\n\n // Use these to calculate familiar a, b, c\n const a = (p2[1] - k) / ((p2[0] - h) * (p2[0] - h));\n const b = -2 * h * a;\n const c = a * h * h + k;\n\n return [a, b, c];\n },\n\n getFunctionForCoeffs: function (\n coeffs: ReadonlyArray<number>,\n x: number,\n ): number {\n const a = coeffs[0];\n const b = coeffs[1];\n const c = coeffs[2];\n return (a * x + b) * x + c;\n },\n\n getPropsForCoeffs: function (coeffs: ReadonlyArray<number>): {\n a: number;\n b: number;\n c: number;\n } {\n return {\n a: coeffs[0],\n b: coeffs[1],\n c: coeffs[2],\n };\n },\n\n getEquationString: function (coords: Coords) {\n const coeffs = this.getCoefficients(coords);\n const a = coeffs[0];\n const b = coeffs[1];\n const c = coeffs[2];\n return (\n \"y = \" +\n a.toFixed(3) +\n \"x^2 + \" +\n b.toFixed(3) +\n \"x + \" +\n c.toFixed(3)\n );\n },\n});\n\nconst Sinusoid: SinusoidType = _.extend({}, PlotDefaults, {\n url: \"https://ka-perseus-graphie.s3.amazonaws.com/3d68e7718498475f53b206c2ab285626baf8857e.png\",\n\n defaultCoords: [\n [0.5, 0.5],\n [0.6, 0.6],\n ],\n movable: MOVABLES.SINUSOID,\n\n getCoefficients: function (coords: Coords) {\n const p1 = coords[0];\n const p2 = coords[1];\n\n const a = p2[1] - p1[1];\n const b = Math.PI / (2 * (p2[0] - p1[0]));\n const c = p1[0] * b;\n const d = p1[1];\n\n return [a, b, c, d];\n },\n\n getFunctionForCoeffs: function (coeffs: ReadonlyArray<number>, x: number) {\n const a = coeffs[0];\n const b = coeffs[1];\n const c = coeffs[2];\n const d = coeffs[3];\n return a * Math.sin(b * x - c) + d;\n },\n\n getPropsForCoeffs: function (coeffs: ReadonlyArray<number>) {\n return {\n a: coeffs[0],\n b: coeffs[1],\n c: coeffs[2],\n d: coeffs[3],\n };\n },\n\n getEquationString: function (coords: Coords) {\n const coeffs = this.getCoefficients(coords);\n const a = coeffs[0];\n const b = coeffs[1];\n const c = coeffs[2];\n const d = coeffs[3];\n return (\n \"y = \" +\n a.toFixed(3) +\n \" sin(\" +\n b.toFixed(3) +\n \"x - \" +\n c.toFixed(3) +\n \") + \" +\n d.toFixed(3)\n );\n },\n\n areEqual: function (\n coeffs1: ReadonlyArray<number>,\n coeffs2: ReadonlyArray<number>,\n ) {\n return approximateDeepEqual(\n canonicalSineCoefficients(coeffs1),\n canonicalSineCoefficients(coeffs2),\n );\n },\n});\n\nconst Tangent: TangentType = _.extend({}, PlotDefaults, {\n url: \"https://ka-perseus-graphie.s3.amazonaws.com/7db80d23c35214f98659fe1cf0765811c1bbfbba.png\",\n\n defaultCoords: [\n [0.5, 0.5],\n [0.75, 0.75],\n ],\n\n getCoefficients: function (coords: Coords) {\n const p1 = coords[0];\n const p2 = coords[1];\n\n const a = p2[1] - p1[1];\n const b = Math.PI / (4 * (p2[0] - p1[0]));\n const c = p1[0] * b;\n const d = p1[1];\n\n return [a, b, c, d];\n },\n\n getFunctionForCoeffs: function (coeffs: ReadonlyArray<number>, x: number) {\n const a = coeffs[0];\n const b = coeffs[1];\n const c = coeffs[2];\n const d = coeffs[3];\n return a * Math.tan(b * x - c) + d;\n },\n\n getEquationString: function (coords: Coords) {\n const coeffs = this.getCoefficients(coords);\n const a = coeffs[0];\n const b = coeffs[1];\n const c = coeffs[2];\n const d = coeffs[3];\n return (\n \"y = \" +\n a.toFixed(3) +\n \" sin(\" +\n b.toFixed(3) +\n \"x - \" +\n c.toFixed(3) +\n \") + \" +\n d.toFixed(3)\n );\n },\n\n areEqual: function (\n coeffs1: ReadonlyArray<number>,\n coeffs2: ReadonlyArray<number>,\n ) {\n return approximateDeepEqual(\n canonicalTangentCoefficients(coeffs1),\n canonicalTangentCoefficients(coeffs2),\n );\n },\n});\n\nconst Exponential: ExponentialType = _.extend({}, PlotDefaults, {\n url: \"https://ka-perseus-graphie.s3.amazonaws.com/9cbfad55525e3ce755a31a631b074670a5dad611.png\",\n\n defaultCoords: [\n [0.5, 0.55],\n [0.75, 0.75],\n ],\n\n defaultAsymptote: [\n [0, 0.5],\n [1.0, 0.5],\n ],\n\n /**\n * Add extra constraints for movement of the points or asymptote (below):\n * newCoord: [x, y]\n * The end position of the point or asymptote endpoint\n * oldCoord: [x, y]\n * The old position of the point or asymptote endpoint\n * coords:\n * An array of coordinates representing the proposed end configuration\n * of the plot coordinates.\n * asymptote:\n * An array of coordinates representing the proposed end configuration\n * of the asymptote.\n *\n * Return: either a coordinate (to be used as the resulting coordinate of\n * the move) or a boolean, where `true` uses newCoord as the resulting\n * coordinate, and `false` uses oldCoord as the resulting coordinate.\n */\n extraCoordConstraint: function (\n newCoord: Coord,\n oldCoord: Coord,\n coords: Coords,\n asymptote: Coords,\n graph,\n ) {\n const y: number = asymptote[0][1];\n return _.all(coords, (coord) => coord[1] !== y);\n },\n\n extraAsymptoteConstraint: function (\n newCoord: Coord,\n oldCoord: Coord,\n coords: Coords,\n asymptote: Coords,\n graph,\n ): Coord {\n const y = newCoord[1];\n const isValid =\n _.all(coords, (coord) => coord[1] > y) ||\n _.all(coords, (coord) => coord[1] < y);\n\n if (isValid) {\n return [oldCoord[0], y];\n }\n // Snap the asymptote as close as possible, i.e., if the user moves\n // the mouse really quickly into an invalid region\n const oldY = oldCoord[1];\n const wasBelow = _.all(coords, (coord) => coord[1] > oldY);\n if (wasBelow) {\n const bottomMost = _.min(_.map(coords, (coord) => coord[1]));\n return [oldCoord[0], bottomMost - graph.snapStep[1]];\n }\n const topMost = _.max(_.map(coords, (coord) => coord[1]));\n return [oldCoord[0], topMost + graph.snapStep[1]];\n },\n\n allowReflectOverAsymptote: true,\n\n getCoefficients: function (\n coords: Coords,\n asymptote: Coords,\n ): ReadonlyArray<number> {\n const p1 = coords[0];\n const p2 = coords[1];\n\n const c = asymptote[0][1];\n const b = Math.log((p1[1] - c) / (p2[1] - c)) / (p1[0] - p2[0]);\n const a = (p1[1] - c) / Math.exp(b * p1[0]);\n return [a, b, c];\n },\n\n getFunctionForCoeffs: function (\n coeffs: ReadonlyArray<number>,\n x: number,\n ): number {\n const a = coeffs[0];\n const b = coeffs[1];\n const c = coeffs[2];\n return a * Math.exp(b * x) + c;\n },\n\n getEquationString: function (coords: Coords, asymptote: Coords) {\n if (!asymptote) {\n return null;\n }\n const coeffs = this.getCoefficients(coords, asymptote);\n const a = coeffs[0];\n const b = coeffs[1];\n const c = coeffs[2];\n return (\n \"y = \" +\n a.toFixed(3) +\n \"e^(\" +\n b.toFixed(3) +\n \"x) + \" +\n c.toFixed(3)\n );\n },\n});\n\nconst Logarithm: LogarithmType = _.extend({}, PlotDefaults, {\n url: \"https://ka-perseus-graphie.s3.amazonaws.com/f6491e99d34af34d924bfe0231728ad912068dc3.png\",\n\n defaultCoords: [\n [0.55, 0.5],\n [0.75, 0.75],\n ],\n\n defaultAsymptote: [\n [0.5, 0],\n [0.5, 1.0],\n ],\n\n extraCoordConstraint: function (\n newCoord: Coord,\n oldCoord: Coord,\n coords: Coord,\n asymptote: Coords,\n graph,\n ) {\n const x = asymptote[0][0];\n return (\n _.all(coords, (coord) => coord[0] !== x) &&\n coords[0][1] !== coords[1][1]\n );\n },\n\n extraAsymptoteConstraint: function (\n newCoord: Coord,\n oldCoord: Coord,\n coords: Coords,\n asymptote: Coords,\n graph,\n ): ReadonlyArray<number> {\n const x = newCoord[0];\n const isValid =\n _.all(coords, (coord) => coord[0] > x) ||\n _.all(coords, (coord) => coord[0] < x);\n\n if (isValid) {\n return [x, oldCoord[1]];\n }\n // Snap the asymptote as close as possible, i.e., if the user moves\n // the mouse really quickly into an invalid region\n const oldX = oldCoord[0];\n const wasLeft = _.all(coords, (coord) => coord[0] > oldX);\n if (wasLeft) {\n const leftMost = _.min(_.map(coords, (coord) => coord[0]));\n return [leftMost - graph.snapStep[0], oldCoord[1]];\n }\n const rightMost = _.max(_.map(coords, (coord) => coord[0]));\n return [rightMost + graph.snapStep[0], oldCoord[1]];\n },\n\n allowReflectOverAsymptote: true,\n\n getCoefficients: function (\n coords: Coords,\n asymptote: Coords,\n ): ReadonlyArray<number> | undefined {\n // It's easiest to calculate the logarithm's coefficients by thinking\n // about it as the inverse of the exponential, so we flip x and y and\n // perform some algebra on the coefficients. This also unifies the\n // logic between the two 'models'.\n const flip = (coord: Coord): Coord => [coord[1], coord[0]];\n const inverseCoeffs = Exponential.getCoefficients(\n _.map(coords, flip) as Coords,\n _.map(asymptote, flip) as Coords,\n );\n if (inverseCoeffs) {\n const c = -inverseCoeffs[2] / inverseCoeffs[0];\n const b = 1 / inverseCoeffs[0];\n const a = 1 / inverseCoeffs[1];\n return [a, b, c];\n }\n },\n\n getFunctionForCoeffs: function (\n coeffs: ReadonlyArray<number>,\n x: number,\n asymptote: Coords,\n ) {\n const a = coeffs[0];\n const b = coeffs[1];\n const c = coeffs[2];\n return a * Math.log(b * x + c);\n },\n\n getEquationString: function (coords: Coords, asymptote: Coords) {\n if (!asymptote) {\n return null;\n }\n const coeffs: ReadonlyArray<number> = this.getCoefficients(\n coords,\n asymptote,\n );\n const a = coeffs[0];\n const b = coeffs[1];\n const c = coeffs[2];\n return (\n \"y = ln(\" +\n a.toFixed(3) +\n \"x + \" +\n b.toFixed(3) +\n \") + \" +\n c.toFixed(3)\n );\n },\n});\n\nconst AbsoluteValue: AbsoluteValueType = _.extend({}, PlotDefaults, {\n url: \"https://ka-perseus-graphie.s3.amazonaws.com/8256a630175a0cb1d11de223d6de0266daf98721.png\",\n\n defaultCoords: [\n [0.5, 0.5],\n [0.75, 0.75],\n ],\n\n getCoefficients: function (\n coords: Coords,\n ): ReadonlyArray<number> | undefined {\n const p1 = coords[0];\n const p2 = coords[1];\n\n const denom = p2[0] - p1[0];\n const num = p2[1] - p1[1];\n\n if (denom === 0) {\n return;\n }\n\n let m = Math.abs(num / denom);\n if (p2[1] < p1[1]) {\n m *= -1;\n }\n const horizontalOffset = p1[0];\n const verticalOffset = p1[1];\n\n return [m, horizontalOffset, verticalOffset];\n },\n\n getFunctionForCoeffs: function (coeffs: ReadonlyArray<number>, x: number) {\n const m = coeffs[0];\n const horizontalOffset = coeffs[1];\n const verticalOffset = coeffs[2];\n return m * Math.abs(x - horizontalOffset) + verticalOffset;\n },\n\n getEquationString: function (coords: Coords) {\n const coeffs: ReadonlyArray<number> = this.getCoefficients(coords);\n const m = coeffs[0];\n const horizontalOffset = coeffs[1];\n const verticalOffset = coeffs[2];\n return (\n \"y = \" +\n m.toFixed(3) +\n \"| x - \" +\n horizontalOffset.toFixed(3) +\n \"| + \" +\n verticalOffset.toFixed(3)\n );\n },\n});\n\n/* Utility functions for dealing with graphing interfaces. */\nconst functionTypeMapping = {\n linear: Linear,\n quadratic: Quadratic,\n sinusoid: Sinusoid,\n tangent: Tangent,\n exponential: Exponential,\n logarithm: Logarithm,\n absolute_value: AbsoluteValue,\n} as const;\n\nexport const allTypes: any = _.keys(functionTypeMapping);\n\nexport type FunctionTypeMappingKeys = keyof typeof functionTypeMapping;\n\ntype ConditionalGraderType<T extends FunctionTypeMappingKeys> =\n // prettier-ignore\n T extends \"linear\" ? LinearType\n : T extends \"quadratic\" ? QuadraticType\n : T extends \"sinusoid\" ? SinusoidType\n : T extends \"tangent\" ? TangentType\n : T extends \"exponential\" ? ExponentialType\n : T extends \"logarithm\" ? LogarithmType\n : T extends \"absolute_value\" ? AbsoluteValueType\n : never;\n\nexport function functionForType<T extends FunctionTypeMappingKeys>(\n type: T,\n): ConditionalGraderType<T> {\n // @ts-expect-error: TypeScript doesn't know how to use deal with generics\n // and conditional types in this way.\n return functionTypeMapping[type];\n}\n","import {approximateDeepEqual} from \"./equality\";\n\nexport function isRealJSONParse(jsonParse: typeof JSON.parse): boolean {\n const randomPhrase = buildRandomPhrase();\n const randomHintPhrase = buildRandomPhrase();\n const randomString = buildRandomString();\n const testingObject = JSON.stringify({\n answerArea: {\n calculator: false,\n chi2Table: false,\n financialCalculatorMonthlyPayment: false,\n financialCalculatorTimeToPayOff: false,\n financialCalculatorTotalAmount: false,\n periodicTable: false,\n periodicTableWithKey: false,\n tTable: false,\n zTable: false,\n },\n hints: [randomHintPhrase, `=${Math.floor(Math.random() * 50) + 1}`],\n itemDataVersion: {major: 0, minor: 1},\n question: {\n content: `${randomPhrase}`,\n images: {},\n widgets: {\n expression1: {\n alignment: \"default\",\n graded: false,\n options: {\n answerForms: [\n {\n considered: \"wrong\",\n form: false,\n key: 0,\n simplify: false,\n value: `${randomString}`,\n },\n ],\n ariaLabel: \"Answer\",\n buttonSets: [\"basic\"],\n functions: [\"f\", \"g\", \"h\"],\n static: true,\n times: false,\n visibleLabel: \"Answer\",\n },\n static: true,\n type: \"expression\",\n version: {major: 1, minor: 0},\n },\n },\n },\n });\n const testJSON = buildTestData(testingObject.replace(/\"/g, '\\\\\"'));\n const parsedTestJSON = jsonParse(testJSON);\n const parsedTestItemData: string =\n parsedTestJSON.data.assessmentItem.item.itemData;\n return approximateDeepEqual(parsedTestItemData, testingObject);\n}\n\nfunction buildRandomString(capitalize: boolean = false) {\n let randomString: string = \"\";\n const randomLength = Math.floor(Math.random() * 8) + 3;\n for (let i = 0; i < randomLength; i++) {\n const randomLetter = String.fromCharCode(\n 97 + Math.floor(Math.random() * 26),\n );\n randomString +=\n capitalize && i === 0 ? randomLetter.toUpperCase() : randomLetter;\n }\n return randomString;\n}\n\nfunction buildRandomPhrase() {\n const phrases: string[] = [];\n const randomLength = Math.floor(Math.random() * 10) + 5;\n for (let i = 0; i < randomLength; i++) {\n phrases.push(buildRandomString(i === 0));\n }\n const modifierStart = [\"**\", \"$\"];\n const modifierEnd = [\"**\", \"$\"];\n const modifierIndex = Math.floor(Math.random() * modifierStart.length);\n return `${modifierStart[modifierIndex]}${phrases.join(\" \")}${modifierEnd[modifierIndex]}`;\n}\n\nfunction buildTestData(testObject: string) {\n return `{\"data\":{\"assessmentItem\":{\"__typename\":\"AssessmentItemOrError\",\"error\":null,\"item\":{\"__typename\":\"AssessmentItem\",\"id\":\"x890b3c70f3e8f4a6\",\"itemData\":\"${testObject}\",\"problemType\":\"Type 1\",\"sha\":\"c7284a3ad65214b4e62bccce236d92f7f5d35941\"}}}}`;\n}\n","var isProduction = process.env.NODE_ENV === 'production';\nvar prefix = 'Invariant failed';\nfunction invariant(condition, message) {\n if (condition) {\n return;\n }\n if (isProduction) {\n throw new Error(prefix);\n }\n var provided = typeof message === 'function' ? message() : message;\n var value = provided ? \"\".concat(prefix, \": \").concat(provided) : prefix;\n throw new Error(value);\n}\n\nexport { invariant as default };\n","import invariant from \"tiny-invariant\";\n\nexport type Result<S, F> = Success<S> | Failure<F>;\n\nexport type Success<T> = {type: \"success\"; value: T};\nexport type Failure<T> = {type: \"failure\"; detail: T};\n\nexport function success<T>(value: T): Success<T> {\n return {type: \"success\", value};\n}\n\nexport function failure<T>(detail: T): Failure<T> {\n return {type: \"failure\", detail};\n}\n\nexport function isFailure<S, F>(result: Result<S, F>): result is Failure<F> {\n return result.type === \"failure\";\n}\n\nexport function isSuccess<S, F>(result: Result<S, F>): result is Success<S> {\n return result.type === \"success\";\n}\n\nexport function assertFailure<S, F>(\n result: Result<S, F>,\n): asserts result is Failure<F> {\n invariant(\n isFailure(result),\n \"expected result to be a Failure, but got a Success\",\n );\n}\n\nexport function assertSuccess<S, F>(\n result: Result<S, F>,\n): asserts result is Success<S> {\n invariant(\n isSuccess(result),\n \"expected result to be a Success, but got a Failure\",\n );\n}\n\n/**\n * @returns a function that transforms the `detail` value of any Failure result\n * passed to it, and leaves Success results unchanged. `mapFailure` is curried\n * for easy composition with Array.map(), mu-lambda's pipe(), etc.\n * @param f the function to apply to Failure `detail`s.\n */\nexport function mapFailure<S, DetailIn, DetailOut>(\n f: (detail: DetailIn) => DetailOut,\n): (result: Result<S, DetailIn>) => Result<S, DetailOut> {\n return (result) => {\n if (isFailure(result)) {\n return failure(f(result.detail));\n }\n return result;\n };\n}\n\n// Result's `all` function is similar to Promise.all: given an array of\n// results, it returns success if all succeeded, and failure if any failed.\nexport function all<S, F>(\n results: Array<Result<S, F>>,\n combineFailureDetails: (a: F, b: F) => F = (a) => a,\n): Result<S[], F> {\n const values: S[] = [];\n const failureDetails: F[] = [];\n for (const result of results) {\n if (result.type === \"success\") {\n values.push(result.value);\n } else {\n failureDetails.push(result.detail);\n }\n }\n\n if (failureDetails.length > 0) {\n return failure(failureDetails.reduce(combineFailureDetails));\n }\n return success(values);\n}\n","import {failure, success} from \"./result\";\n\nimport type {ParseContext, Mismatch, PathSegment} from \"./parser-types\";\nimport type {Failure, Success} from \"./result\";\n\nexport class ErrorTrackingParseContext implements ParseContext {\n constructor(private readonly path: PathSegment[]) {}\n\n failure(\n expected: string | string[],\n badValue: unknown,\n ): Failure<Mismatch[]> {\n return failure([\n {\n expected: wrapInArray(expected),\n badValue,\n path: this.path,\n },\n ]);\n }\n\n forSubtree(key: PathSegment): ParseContext {\n return new ErrorTrackingParseContext([...this.path, key]);\n }\n\n success<T>(value: T): Success<T> {\n return success(value);\n }\n}\n\nfunction wrapInArray(a: string | string[]): string[] {\n return Array.isArray(a) ? a : [a];\n}\n","import type {PathSegment} from \"./parser-types\";\n\nexport function formatPath(path: PathSegment[]): string {\n return \"(root)\" + path.map(formatPathSegment).join(\"\");\n}\n\nfunction formatPathSegment(segment: PathSegment): string {\n if (typeof segment === \"string\") {\n return validIdentifier.test(segment)\n ? \".\" + segment\n : `[${JSON.stringify(segment)}]`;\n }\n return `[${segment.toString()}]`;\n}\n\nconst validIdentifier = /^[A-Za-z$_][A-Za-z$_0-9]*$/;\n","import {formatPath} from \"./object-path\";\n\nimport type {Mismatch} from \"./parser-types\";\n\nexport function message(failure: Mismatch): string {\n const expected = conjoin(failure.expected);\n const path = formatPath(failure.path);\n const badValue = JSON.stringify(failure.badValue);\n return `At ${path} -- expected ${expected}, but got ${badValue}`;\n}\n\nfunction conjoin(items: string[]): string {\n switch (items.length) {\n // TODO(benchristel): handle 0 if this is reused elsewhere.\n case 1:\n return items[0];\n case 2:\n return items.join(\" or \");\n default: {\n const allButLast = items.slice(0, items.length - 1);\n const last = items[items.length - 1];\n return allButLast.join(\", \") + \", or \" + last;\n }\n }\n}\n","import {ErrorTrackingParseContext} from \"./error-tracking-parse-context\";\nimport {message} from \"./parse-failure-detail\";\nimport {failure, isFailure} from \"./result\";\n\nimport type {Parser} from \"./parser-types\";\nimport type {Result} from \"./result\";\n\nexport function parse<T>(value: unknown, parser: Parser<T>): Result<T, string> {\n const result = parser(value, new ErrorTrackingParseContext([]));\n if (isFailure(result)) {\n return failure(result.detail.map(message).join(\"; \"));\n }\n return result;\n}\n","import type {Parser} from \"../parser-types\";\n\nexport const any: Parser<any> = (rawValue, ctx) => ctx.success(rawValue);\n","import * as Result from \"../result\";\n\nimport type {ParseContext, Parser} from \"../parser-types\";\n\nexport function array<T>(elementParser: Parser<T>): Parser<T[]> {\n return (rawValue: unknown, ctx: ParseContext) => {\n if (!Array.isArray(rawValue)) {\n return ctx.failure(\"array\", rawValue);\n }\n const elementResults = rawValue.map((elem, i) =>\n elementParser(elem, ctx.forSubtree(i)),\n );\n return Result.all(elementResults, concat);\n };\n}\n\nfunction concat<T>(a: T[], b: T[]): T[] {\n return [...a, ...b];\n}\n","import type {ParseContext, ParseResult} from \"../parser-types\";\n\nexport function boolean(\n rawValue: unknown,\n ctx: ParseContext,\n): ParseResult<boolean> {\n if (typeof rawValue === \"boolean\") {\n return ctx.success(rawValue);\n }\n return ctx.failure(\"boolean\", rawValue);\n}\n","import type {Parser} from \"../parser-types\";\n\ntype Primitive = string | number | boolean | null | undefined;\n\nexport function constant<T extends Primitive>(acceptedValue: T): Parser<T> {\n return (rawValue, ctx) => {\n if (rawValue !== acceptedValue) {\n return ctx.failure(String(JSON.stringify(acceptedValue)), rawValue);\n }\n return ctx.success(acceptedValue);\n };\n}\n","import type {Parser} from \"../parser-types\";\n\nexport function enumeration<T extends readonly string[]>(\n ...acceptedValues: T\n): Parser<T[number]> {\n return (rawValue, ctx) => {\n if (typeof rawValue === \"string\") {\n const index = acceptedValues.indexOf(rawValue);\n if (index > -1) {\n return ctx.success(acceptedValues[index]);\n }\n }\n const expected = acceptedValues.map((v) => JSON.stringify(v));\n return ctx.failure(expected, rawValue);\n };\n}\n","export function isObject(x: unknown): x is Record<keyof any, unknown> {\n return x != null && Object.getPrototypeOf(x) === Object.prototype;\n}\n","import type {Parser} from \"../parser-types\";\n\nexport function nullable<T>(parseValue: Parser<T>): Parser<T | null> {\n return (rawValue, ctx) => {\n if (rawValue === null) {\n return ctx.success(rawValue);\n }\n return parseValue(rawValue, ctx);\n };\n}\n","import type {Parser} from \"../parser-types\";\n\nexport const number: Parser<number> = (rawValue, ctx) => {\n if (typeof rawValue === \"number\") {\n return ctx.success(rawValue);\n }\n return ctx.failure(\"number\", rawValue);\n};\n","import {failure, isSuccess} from \"../result\";\n\nimport {isObject} from \"./is-object\";\n\nimport type {Mismatch, ParsedValue, Parser} from \"../parser-types\";\n\ntype ObjectSchema = Record<keyof any, Parser<any>>;\n\nexport function object<S extends ObjectSchema>(\n schema: S,\n): Parser<{[K in keyof S]: ParsedValue<S[K]>}> {\n return (rawValue, ctx) => {\n if (!isObject(rawValue)) {\n return ctx.failure(\"object\", rawValue);\n }\n\n const ret: any = {...rawValue};\n const mismatches: Mismatch[] = [];\n for (const [prop, propParser] of Object.entries(schema)) {\n const result = propParser(rawValue[prop], ctx.forSubtree(prop));\n if (isSuccess(result)) {\n if (result.value !== undefined || prop in rawValue) {\n ret[prop] = result.value;\n }\n } else {\n mismatches.push(...result.detail);\n }\n }\n\n if (mismatches.length > 0) {\n return failure(mismatches);\n }\n return ctx.success(ret);\n };\n}\n","import type {Parser} from \"../parser-types\";\n\nexport function optional<T>(parseValue: Parser<T>): Parser<T | undefined> {\n return (rawValue, ctx) => {\n if (rawValue === undefined) {\n return ctx.success(rawValue);\n }\n return parseValue(rawValue, ctx);\n };\n}\n","import {isFailure} from \"../result\";\n\nimport type {Parser} from \"../parser-types\";\n\nexport function pair<A, B>(\n parseA: Parser<A>,\n parseB: Parser<B>,\n): Parser<[A, B]> {\n return (rawValue, ctx) => {\n if (!Array.isArray(rawValue)) {\n return ctx.failure(\"array\", rawValue);\n }\n if (rawValue.length !== 2) {\n return ctx.failure(\"array of length 2\", rawValue);\n }\n const [rawA, rawB] = rawValue;\n const resultA = parseA(rawA, ctx.forSubtree(0));\n if (isFailure(resultA)) {\n return resultA;\n }\n const resultB = parseB(rawB, ctx.forSubtree(1));\n if (isFailure(resultB)) {\n return resultB;\n }\n\n return ctx.success([resultA.value, resultB.value]);\n };\n}\n","import {isFailure} from \"../result\";\n\nimport type {\n ParseContext,\n ParsedValue,\n Parser,\n PartialParser,\n} from \"../parser-types\";\n\nexport function pipeParsers<T>(p: Parser<T>): ParserPipeline<T> {\n return new ParserPipeline(p);\n}\n\nexport class ParserPipeline<T> {\n constructor(public readonly parser: Parser<T>) {}\n\n then<U>(nextParser: PartialParser<T, U>): ParserPipeline<U> {\n return new ParserPipeline<U>(composeParsers(this.parser, nextParser));\n }\n}\n\nfunction composeParsers<\n A extends Parser<any>,\n B extends PartialParser<ParsedValue<A>, any>,\n>(parserA: A, parserB: B): Parser<ParsedValue<B>> {\n return (rawValue: unknown, ctx: ParseContext) => {\n const partialResult = parserA(rawValue, ctx);\n if (isFailure(partialResult)) {\n return partialResult;\n }\n\n return parserB(partialResult.value, ctx);\n };\n}\n","import {failure, isFailure, isSuccess} from \"../result\";\n\nimport {isObject} from \"./is-object\";\n\nimport type {Mismatch, Parser} from \"../parser-types\";\n\nexport function record<K extends string, V>(\n parseKey: Parser<K>,\n parseValue: Parser<V>,\n): Parser<Record<K, V>> {\n return (rawValue, ctx) => {\n if (!isObject(rawValue)) {\n return ctx.failure(\"object\", rawValue);\n }\n\n const result = {} as Record<K, V>;\n const mismatches: Mismatch[] = [];\n for (const [key, value] of Object.entries(rawValue)) {\n const entryCtx = ctx.forSubtree(key);\n const keyResult = parseKey(key, entryCtx);\n if (isFailure(keyResult)) {\n mismatches.push(...keyResult.detail);\n }\n\n const valueResult = parseValue(value, entryCtx);\n if (isFailure(valueResult)) {\n mismatches.push(...valueResult.detail);\n }\n\n if (isSuccess(keyResult) && isSuccess(valueResult)) {\n result[keyResult.value] = valueResult.value;\n }\n }\n\n if (mismatches.length > 0) {\n return failure(mismatches);\n }\n return ctx.success(result);\n };\n}\n","import type {Parser} from \"../parser-types\";\n\nexport const string: Parser<string> = (rawValue, ctx) => {\n if (typeof rawValue === \"string\") {\n return ctx.success(rawValue);\n }\n return ctx.failure(\"string\", rawValue);\n};\n","import {isFailure} from \"../result\";\n\nimport type {Parser} from \"../parser-types\";\n\nexport function trio<A, B, C>(\n parseA: Parser<A>,\n parseB: Parser<B>,\n parseC: Parser<C>,\n): Parser<[A, B, C]> {\n return (rawValue, ctx) => {\n if (!Array.isArray(rawValue)) {\n return ctx.failure(\"array\", rawValue);\n }\n if (rawValue.length !== 3) {\n return ctx.failure(\"array of length 3\", rawValue);\n }\n\n const resultA = parseA(rawValue[0], ctx.forSubtree(0));\n if (isFailure(resultA)) {\n return resultA;\n }\n\n const resultB = parseB(rawValue[1], ctx.forSubtree(1));\n if (isFailure(resultB)) {\n return resultB;\n }\n\n const resultC = parseC(rawValue[2], ctx.forSubtree(2));\n if (isFailure(resultC)) {\n return resultC;\n }\n\n return ctx.success([resultA.value, resultB.value, resultC.value]);\n };\n}\n","import {isSuccess} from \"../result\";\n\nimport type {Parser} from \"../parser-types\";\n\nexport function union<T>(parseBranch: Parser<T>): UnionBuilder<T> {\n return new UnionBuilder(parseBranch);\n}\n\nexport class UnionBuilder<T> {\n constructor(public parser: Parser<T>) {}\n\n or<New>(newBranch: Parser<New>) {\n return new UnionBuilder<T | New>(either(this.parser, newBranch));\n }\n}\n\nfunction either<A, B>(parseA: Parser<A>, parseB: Parser<B>): Parser<A | B> {\n return (rawValue, ctx) => {\n const resultA = parseA(rawValue, ctx);\n if (isSuccess(resultA)) {\n return resultA;\n }\n\n return parseB(rawValue, ctx);\n };\n}\n","import {success} from \"../result\";\n\nimport type {Parser} from \"../parser-types\";\n\nexport function defaulted<T, Default>(\n parser: Parser<T>,\n fallback: (missingValue: null | undefined) => Default,\n): Parser<T | Default> {\n return (rawValue, ctx) => {\n if (rawValue == null) {\n return success(fallback(rawValue));\n }\n return parser(rawValue, ctx);\n };\n}\n","import {number, object, record, string} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport type {PerseusImageDetail} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parseImages: Parser<{[key: string]: PerseusImageDetail}> =\n defaulted(\n record(\n string,\n object({\n width: number,\n height: number,\n }),\n ),\n () => ({}),\n );\n","import {\n boolean,\n nullable,\n number,\n object,\n optional,\n string,\n} from \"../general-purpose-parsers\";\n\nimport type {WidgetOptions} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport function parseWidget<Type extends string, Options>(\n parseType: Parser<Type>,\n parseOptions: Parser<Options>,\n): Parser<WidgetOptions<Type, Options>> {\n return object({\n type: parseType,\n static: optional(boolean),\n graded: optional(boolean),\n alignment: optional(string),\n options: parseOptions,\n key: optional(nullable(number)),\n version: optional(\n object({\n major: number,\n minor: number,\n }),\n ),\n });\n}\n\nexport function parseWidgetWithVersion<\n Version extends {major: number; minor: number} | undefined,\n Type extends string,\n Options,\n>(\n parseVersion: Parser<Version>,\n parseType: Parser<Type>,\n parseOptions: Parser<Options>,\n): Parser<WidgetOptions<Type, Options>> {\n return object({\n type: parseType,\n static: optional(boolean),\n graded: optional(boolean),\n alignment: optional(string),\n options: parseOptions,\n key: optional(number),\n version: parseVersion,\n });\n}\n","import {\n array,\n boolean,\n constant,\n number,\n object,\n optional,\n string,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {CategorizerWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parseCategorizerWidget: Parser<CategorizerWidget> = parseWidget(\n constant(\"categorizer\"),\n object({\n items: array(string),\n categories: array(string),\n randomizeItems: defaulted(boolean, () => false),\n static: defaulted(boolean, () => false),\n values: array(defaulted(number, () => 0)),\n highlightLint: optional(boolean),\n linterContext: optional(\n object({\n contentType: string,\n paths: array(string),\n stack: array(string),\n }),\n ),\n }),\n);\n","import {\n any,\n array,\n boolean,\n constant,\n number,\n object,\n string,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {CSProgramWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parseCSProgramWidget: Parser<CSProgramWidget> = parseWidget(\n constant(\"cs-program\"),\n object({\n programID: string,\n programType: any,\n settings: array(object({name: string, value: string})),\n showEditor: boolean,\n showButtons: boolean,\n height: number,\n static: defaulted(boolean, () => false),\n }),\n);\n","import {boolean, constant, object, string} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {DefinitionWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parseDefinitionWidget: Parser<DefinitionWidget> = parseWidget(\n constant(\"definition\"),\n object({\n togglePrompt: string,\n definition: string,\n static: defaulted(boolean, () => false),\n }),\n);\n","import {\n array,\n boolean,\n constant,\n object,\n string,\n optional,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {DropdownWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parseDropdownWidget: Parser<DropdownWidget> = parseWidget(\n constant(\"dropdown\"),\n object({\n placeholder: defaulted(string, () => \"\"),\n ariaLabel: optional(string),\n visibleLabel: optional(string),\n static: defaulted(boolean, () => false),\n choices: array(\n object({\n content: string,\n correct: boolean,\n }),\n ),\n }),\n);\n","import {boolean, constant, object, string} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\nimport {parseWidgetsMap} from \"./widgets-map\";\n\nimport type {ExplanationWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parseExplanationWidget: Parser<ExplanationWidget> = parseWidget(\n constant(\"explanation\"),\n object({\n showPrompt: string,\n hidePrompt: string,\n explanation: string,\n // We wrap parseWidgetsMap in a function here to make sure it is not\n // referenced before it is defined. There is an import cycle between\n // this file and widgets-map.ts that could cause it to be undefined.\n widgets: defaulted(\n (rawVal, ctx) => parseWidgetsMap(rawVal, ctx),\n () => ({}),\n ),\n static: defaulted(boolean, () => false),\n }),\n);\n","import type {PartialParser} from \"../parser-types\";\n\n// Given a function, creates a PartialParser that converts one type to another\n// using that function. The returned parser never fails.\nexport function convert<A, B>(f: (value: A) => B): PartialParser<A, B> {\n return (rawValue, ctx) => ctx.success(f(rawValue));\n}\n","import {array, enumeration} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nexport const parseLegacyButtonSet = enumeration(\n \"basic\",\n \"basic+div\",\n \"trig\",\n \"prealgebra\",\n \"logarithms\",\n \"basic relations\",\n \"advanced relations\",\n \"scientific\",\n);\n\nexport const parseLegacyButtonSets = defaulted(\n array(parseLegacyButtonSet),\n // NOTE(benchristel): I copied the default buttonSets from\n // expression.tsx. See the parse-perseus-json/README.md for\n // an explanation of why we want to duplicate the default here.\n () => [\"basic\", \"trig\", \"prealgebra\", \"logarithms\"] as const,\n);\n","import {\n isObject,\n number,\n object,\n pipeParsers,\n} from \"../general-purpose-parsers\";\nimport {convert} from \"../general-purpose-parsers/convert\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\nimport {isFailure} from \"../result\";\n\nimport type {Version} from \"../../data-schema\";\nimport type {ParseContext, Parser} from \"../parser-types\";\n\ntype Versioned = {\n version?: Version;\n};\n\n/**\n * Creates a parser for a widget options type with multiple major versions. Old\n * versions are migrated to the latest version. The parse fails if the input\n * data does not match any of the versions.\n *\n * @example\n * const parseOptions = versionedWidgetOptions(3, parseOptionsV3)\n * .withMigrationFrom(2, parseOptionsV2, migrateV2ToV3)\n * .withMigrationFrom(1, parseOptionsV1, migrateV1ToV2)\n * .withMigrationFrom(0, parseOptionsV0, migrateV0ToV1)\n * .parser;\n *\n * @param latestMajorVersion the latest major version of the widget options.\n * @param parseLatest a {@link Parser} for the latest version of the widget\n * options.\n * @returns a builder object, to which migrations from earlier versions can be\n * added. Migrations must be added in \"reverse chronological\" order as in the\n * example above.\n */\nexport function versionedWidgetOptions<Latest extends Versioned>(\n latestMajorVersion: number,\n parseLatest: Parser<Latest>,\n): VersionedWidgetOptionsParserBuilder<Latest, Latest> {\n return new VersionedWidgetOptionsParserBuilder(\n latestMajorVersion,\n parseLatest,\n (latest) => latest,\n (raw, ctx) =>\n ctx.failure(\"widget options with a known version number\", raw),\n );\n}\n\nclass VersionedWidgetOptionsParserBuilder<\n // The latest version of the widget options\n Latest extends Versioned,\n // A version of the widget options which we want to migrate to Latest.\n MigratableWidgetOptions extends Versioned,\n> {\n public parser: Parser<Latest>;\n\n constructor(\n majorVersion: number,\n parseThisVersion: Parser<MigratableWidgetOptions>,\n private migrateToLatest: (m: MigratableWidgetOptions) => Latest,\n private parseOtherVersions: Parser<Latest>,\n ) {\n const parseThisVersionAndMigrateToLatest = pipeParsers(\n parseThisVersion,\n ).then(convert(this.migrateToLatest)).parser;\n\n this.parser = (raw: unknown, ctx: ParseContext) => {\n if (!isObject(raw)) {\n return ctx.failure(\"object\", raw);\n }\n\n const versionParseResult = parseVersionedObject(raw, ctx);\n if (isFailure(versionParseResult)) {\n return versionParseResult;\n }\n\n if (versionParseResult.value.version.major !== majorVersion) {\n return this.parseOtherVersions(raw, ctx);\n }\n\n return parseThisVersionAndMigrateToLatest(raw, ctx);\n };\n }\n\n /**\n * Add a migration from an old version of the widget options.\n */\n withMigrationFrom<Old extends Versioned>(\n majorVersion: number,\n parseOldVersion: Parser<Old>,\n migrateToNextVersion: (old: Old) => MigratableWidgetOptions,\n ): VersionedWidgetOptionsParserBuilder<Latest, Old> {\n const parseOtherVersions = this.parser;\n\n const migrateToLatest = (old: Old) =>\n this.migrateToLatest(migrateToNextVersion(old));\n\n return new VersionedWidgetOptionsParserBuilder(\n majorVersion,\n parseOldVersion,\n migrateToLatest,\n parseOtherVersions,\n );\n }\n}\n\nconst parseVersionedObject = object({\n version: defaulted(object({major: number, minor: number}), () => ({\n major: 0,\n minor: 0,\n })),\n});\n","import {\n array,\n boolean,\n constant,\n enumeration,\n number,\n object,\n optional,\n pipeParsers,\n string,\n union,\n} from \"../general-purpose-parsers\";\nimport {convert} from \"../general-purpose-parsers/convert\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseLegacyButtonSets} from \"./legacy-button-sets\";\nimport {versionedWidgetOptions} from \"./versioned-widget-options\";\nimport {parseWidgetWithVersion} from \"./widget\";\n\nimport type {\n ExpressionWidget,\n PerseusExpressionAnswerForm,\n} from \"../../data-schema\";\nimport type {ParsedValue, Parser} from \"../parser-types\";\n\nconst stringOrNumberOrNullOrUndefined = union(string)\n .or(number)\n .or(constant(null))\n .or(constant(undefined)).parser;\n\nconst parsePossiblyInvalidAnswerForm = object({\n // `value` is the possibly invalid part of this. It should always be a\n // string, but some answer forms don't have it. The Expression widget\n // ignores invalid values, so we can safely filter them out during parsing.\n value: optional(string),\n form: defaulted(boolean, () => false),\n simplify: defaulted(boolean, () => false),\n considered: enumeration(\"correct\", \"wrong\", \"ungraded\"),\n key: pipeParsers(stringOrNumberOrNullOrUndefined).then(convert(String))\n .parser,\n});\n\nfunction removeInvalidAnswerForms(\n possiblyInvalid: Array<ParsedValue<typeof parsePossiblyInvalidAnswerForm>>,\n): PerseusExpressionAnswerForm[] {\n const valid: PerseusExpressionAnswerForm[] = [];\n for (const answerForm of possiblyInvalid) {\n const {value} = answerForm;\n if (value != null) {\n // Copying the object seems to be needed to make TypeScript happy\n valid.push({...answerForm, value});\n }\n }\n return valid;\n}\n\nconst version1 = object({major: constant(1), minor: number});\nconst parseExpressionWidgetV1: Parser<ExpressionWidget> =\n parseWidgetWithVersion(\n version1,\n constant(\"expression\"),\n object({\n answerForms: pipeParsers(\n array(parsePossiblyInvalidAnswerForm),\n ).then(convert(removeInvalidAnswerForms)).parser,\n functions: array(string),\n times: boolean,\n visibleLabel: optional(string),\n ariaLabel: optional(string),\n buttonSets: parseLegacyButtonSets,\n buttonsVisible: optional(enumeration(\"always\", \"never\", \"focused\")),\n }),\n );\n\nconst version0 = optional(object({major: constant(0), minor: number}));\nconst parseExpressionWidgetV0 = parseWidgetWithVersion(\n version0,\n constant(\"expression\"),\n object({\n functions: array(string),\n times: boolean,\n visibleLabel: optional(string),\n ariaLabel: optional(string),\n form: boolean,\n simplify: boolean,\n value: string,\n buttonSets: parseLegacyButtonSets,\n buttonsVisible: optional(enumeration(\"always\", \"never\", \"focused\")),\n }),\n);\n\nfunction migrateV0ToV1(\n widget: ParsedValue<typeof parseExpressionWidgetV0>,\n): ExpressionWidget {\n const {options} = widget;\n return {\n ...widget,\n version: {major: 1, minor: 0},\n options: {\n times: options.times,\n buttonSets: options.buttonSets,\n functions: options.functions,\n buttonsVisible: options.buttonsVisible,\n visibleLabel: options.visibleLabel,\n ariaLabel: options.ariaLabel,\n\n answerForms: [\n {\n considered: \"correct\",\n form: options.form,\n simplify: options.simplify,\n value: options.value,\n },\n ],\n },\n };\n}\n\nexport const parseExpressionWidget: Parser<ExpressionWidget> =\n versionedWidgetOptions(1, parseExpressionWidgetV1).withMigrationFrom(\n 0,\n parseExpressionWidgetV0,\n migrateV0ToV1,\n ).parser;\n","import {\n boolean,\n constant,\n nullable,\n number,\n object,\n optional,\n pipeParsers,\n record,\n string,\n union,\n} from \"../general-purpose-parsers\";\nimport {convert} from \"../general-purpose-parsers/convert\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parsePerseusRenderer} from \"./perseus-renderer\";\nimport {parseWidget} from \"./widget\";\nimport {parseWidgetsMap} from \"./widgets-map\";\n\nimport type {GradedGroupWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nconst falseToNull = pipeParsers(constant(false)).then(\n convert(() => null),\n).parser;\nexport const parseGradedGroupWidgetOptions = object({\n title: defaulted(string, () => \"\"),\n hasHint: optional(nullable(boolean)),\n // This module has an import cycle with parsePerseusRenderer.\n // The anonymous function below ensures that we don't try to access\n // parsePerseusRenderer before it's defined.\n hint: union(falseToNull)\n .or(constant(null))\n .or(constant(undefined))\n .or((rawVal, ctx) => parsePerseusRenderer(rawVal, ctx)).parser,\n content: string,\n // This module has an import cycle with parseWidgetsMap.\n // The anonymous function below ensures that we don't try to access\n // parseWidgetsMap before it's defined.\n widgets: (rawVal, ctx) => parseWidgetsMap(rawVal, ctx),\n widgetEnabled: optional(nullable(boolean)),\n immutableWidgets: optional(nullable(boolean)),\n images: record(\n string,\n object({\n width: number,\n height: number,\n }),\n ),\n});\n\nexport const parseGradedGroupWidget: Parser<GradedGroupWidget> = parseWidget(\n constant(\"graded-group\"),\n parseGradedGroupWidgetOptions,\n);\n","import {array, constant, object} from \"../general-purpose-parsers\";\n\nimport {parseGradedGroupWidgetOptions} from \"./graded-group-widget\";\nimport {parseWidget} from \"./widget\";\n\nimport type {GradedGroupSetWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parseGradedGroupSetWidget: Parser<GradedGroupSetWidget> =\n parseWidget(\n constant(\"graded-group-set\"),\n object({gradedGroups: array(parseGradedGroupWidgetOptions)}),\n );\n","import {isObject} from \"./is-object\";\n\nimport type {ParseContext, Parser} from \"../parser-types\";\n\ntype Primitive = number | string | boolean | null | undefined;\n\n/**\n * discriminatedUnion() should be preferred over union() when parsing a\n * discriminated union type, because discriminatedUnion() produces more\n * understandable failure messages. It takes the discriminant as the source of\n * truth for which variant is to be parsed, and expects the other data to match\n * that variant.\n */\nexport function discriminatedUnionOn<DK extends string>(discriminantKey: DK) {\n const noMoreBranches: Parser<never> = (raw: unknown, ctx: ParseContext) => {\n if (!isObject(raw)) {\n return ctx.failure(\"object\", raw);\n }\n return ctx\n .forSubtree(discriminantKey)\n .failure(\"a valid value\", raw[discriminantKey]);\n };\n\n return new DiscriminatedUnionBuilder(discriminantKey, noMoreBranches);\n}\n\nclass DiscriminatedUnionBuilder<\n DK extends string,\n Union extends {[k in DK]: Primitive},\n> {\n constructor(\n private discriminantKey: DK,\n public parser: Parser<Union>,\n ) {}\n\n withBranch<Variant extends {[k in DK]: Primitive}>(\n discriminantValue: Primitive,\n parseNewVariant: Parser<Variant>,\n ): DiscriminatedUnionBuilder<DK, Union | Variant> {\n const parseNewBranch = discriminatedUnionBranch(\n this.discriminantKey,\n discriminantValue,\n parseNewVariant,\n this.parser,\n );\n\n return new DiscriminatedUnionBuilder(\n this.discriminantKey,\n parseNewBranch,\n );\n }\n}\n\nfunction discriminatedUnionBranch<\n DK extends string,\n DV extends Primitive,\n Variant extends {[k in DK]: DV},\n Rest extends {[k in DK]: DV},\n>(\n discriminantKey: DK,\n discriminantValue: DV,\n parseVariant: Parser<Variant>,\n parseOtherBranches: Parser<Rest>,\n): Parser<Variant | Rest> {\n return (raw: unknown, ctx: ParseContext) => {\n if (!isObject(raw)) {\n return ctx.failure(\"object\", raw);\n }\n\n if (raw[discriminantKey] === discriminantValue) {\n return parseVariant(raw, ctx);\n }\n\n return parseOtherBranches(raw, ctx);\n };\n}\n","import {\n array,\n boolean,\n constant,\n enumeration,\n nullable,\n number,\n object,\n optional,\n pair,\n string,\n union,\n} from \"../general-purpose-parsers\";\nimport {discriminatedUnionOn} from \"../general-purpose-parsers/discriminated-union\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {GrapherWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nconst pairOfNumbers = pair(number, number);\n\nconst pairOfPoints = pair(pairOfNumbers, pairOfNumbers);\n\nexport const parseGrapherWidget: Parser<GrapherWidget> = parseWidget(\n constant(\"grapher\"),\n object({\n availableTypes: array(\n enumeration(\n \"absolute_value\",\n \"exponential\",\n \"linear\",\n \"logarithm\",\n \"quadratic\",\n \"sinusoid\",\n \"tangent\",\n ),\n ),\n correct: discriminatedUnionOn(\"type\")\n .withBranch(\n \"absolute_value\",\n object({\n type: constant(\"absolute_value\"),\n coords: nullable(pairOfPoints),\n }),\n )\n .withBranch(\n \"exponential\",\n object({\n type: constant(\"exponential\"),\n asymptote: pairOfPoints,\n coords: nullable(pairOfPoints),\n }),\n )\n .withBranch(\n \"linear\",\n object({\n type: constant(\"linear\"),\n coords: nullable(pairOfPoints),\n }),\n )\n .withBranch(\n \"logarithm\",\n object({\n type: constant(\"logarithm\"),\n asymptote: pairOfPoints,\n coords: nullable(pairOfPoints),\n }),\n )\n .withBranch(\n \"quadratic\",\n object({\n type: constant(\"quadratic\"),\n coords: nullable(pairOfPoints),\n }),\n )\n .withBranch(\n \"sinusoid\",\n object({\n type: constant(\"sinusoid\"),\n coords: nullable(pairOfPoints),\n }),\n )\n .withBranch(\n \"tangent\",\n object({\n type: constant(\"tangent\"),\n coords: nullable(pairOfPoints),\n }),\n ).parser,\n graph: object({\n backgroundImage: object({\n bottom: optional(number),\n height: optional(number),\n left: optional(number),\n scale: optional(number),\n url: optional(nullable(string)),\n width: optional(number),\n }),\n box: optional(pairOfNumbers),\n editableSettings: optional(\n array(enumeration(\"graph\", \"snap\", \"image\", \"measure\")),\n ),\n gridStep: optional(pairOfNumbers),\n labels: pair(string, string),\n markings: enumeration(\"graph\", \"none\", \"grid\"),\n range: pair(pairOfNumbers, pairOfNumbers),\n rulerLabel: constant(\"\"),\n rulerTicks: number,\n showProtractor: optional(boolean),\n showRuler: optional(boolean),\n showTooltips: optional(boolean),\n snapStep: optional(pairOfNumbers),\n step: pairOfNumbers,\n valid: optional(union(boolean).or(string).parser),\n }),\n }),\n);\n","import {constant} from \"../general-purpose-parsers\";\n\nimport {parsePerseusRenderer} from \"./perseus-renderer\";\nimport {parseWidget} from \"./widget\";\n\nimport type {GroupWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parseGroupWidget: Parser<GroupWidget> = parseWidget(\n constant(\"group\"),\n // This module has an import cycle with parsePerseusRenderer.\n // The anonymous function below ensures that we don't try to access\n // parsePerseusRenderer before it's defined.\n (rawVal, ctx) => parsePerseusRenderer(rawVal, ctx),\n);\n","import {\n array,\n boolean,\n constant,\n number,\n object,\n optional,\n string,\n union,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {IFrameWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parseIframeWidget: Parser<IFrameWidget> = parseWidget(\n constant(\"iframe\"),\n object({\n url: string,\n settings: optional(array(object({name: string, value: string}))),\n width: union(number).or(string).parser,\n height: union(number).or(string).parser,\n allowFullScreen: defaulted(boolean, () => false),\n allowTopNavigation: optional(boolean),\n static: defaulted(boolean, () => false),\n }),\n);\n","import type {PartialParser} from \"../parser-types\";\n\nexport const stringToNumber: PartialParser<string | number, number> = (\n rawValue,\n ctx,\n) => {\n if (typeof rawValue === \"number\") {\n return ctx.success(rawValue);\n }\n\n const parsedNumber = +rawValue;\n if (rawValue === \"\" || isNaN(parsedNumber)) {\n return ctx.failure(\"a number or numeric string\", rawValue);\n }\n\n return ctx.success(parsedNumber);\n};\n","import {\n nullable,\n number,\n object,\n optional,\n pipeParsers,\n string,\n union,\n} from \"../general-purpose-parsers\";\nimport {convert} from \"../general-purpose-parsers/convert\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\nimport {stringToNumber} from \"../general-purpose-parsers/string-to-number\";\n\nimport type {PerseusImageBackground} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nfunction emptyToZero(x: string | number): string | number {\n return x === \"\" ? 0 : x;\n}\n\nconst imageDimensionToNumber = pipeParsers(union(number).or(string).parser)\n // In this specific case, empty string is equivalent to zero. An empty\n // string parses to either NaN (using parseInt) or 0 (using unary +) and\n // CSS will treat NaN as invalid and default to 0 instead.\n .then(convert(emptyToZero))\n .then(stringToNumber).parser;\n\nconst dimensionOrUndefined = defaulted(imageDimensionToNumber, () => undefined);\n\nexport const parsePerseusImageBackground: Parser<PerseusImageBackground> =\n object({\n url: optional(nullable(string)),\n width: dimensionOrUndefined,\n height: dimensionOrUndefined,\n top: dimensionOrUndefined,\n left: dimensionOrUndefined,\n bottom: dimensionOrUndefined,\n scale: dimensionOrUndefined,\n });\n","import {\n array,\n boolean,\n constant,\n number,\n object,\n optional,\n pair,\n string,\n} from \"../general-purpose-parsers\";\n\nimport {parsePerseusImageBackground} from \"./perseus-image-background\";\nimport {parseWidget} from \"./widget\";\n\nimport type {ImageWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nconst pairOfNumbers = pair(number, number);\n\nexport const parseImageWidget: Parser<ImageWidget> = parseWidget(\n constant(\"image\"),\n object({\n title: optional(string),\n caption: optional(string),\n alt: optional(string),\n backgroundImage: parsePerseusImageBackground,\n static: optional(boolean),\n labels: optional(\n array(\n object({\n content: string,\n alignment: string,\n coordinates: array(number),\n }),\n ),\n ),\n range: optional(pair(pairOfNumbers, pairOfNumbers)),\n box: optional(pairOfNumbers),\n }),\n);\n","import {\n boolean,\n constant,\n enumeration,\n number,\n object,\n optional,\n string,\n union,\n} from \"../general-purpose-parsers\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {InputNumberWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nconst booleanToString: Parser<string> = (rawValue, ctx) => {\n if (typeof rawValue === \"boolean\") {\n return ctx.success(String(rawValue));\n }\n return ctx.failure(\"boolean\", rawValue);\n};\n\nexport const parseInputNumberWidget: Parser<InputNumberWidget> = parseWidget(\n constant(\"input-number\"),\n object({\n answerType: optional(\n enumeration(\n \"number\",\n \"decimal\",\n \"integer\",\n \"rational\",\n \"improper\",\n \"mixed\",\n \"percent\",\n \"pi\",\n ),\n ),\n inexact: optional(boolean),\n maxError: optional(union(number).or(string).parser),\n rightAlign: optional(boolean),\n simplify: enumeration(\"required\", \"optional\", \"enforced\"),\n size: enumeration(\"normal\", \"small\"),\n // TODO(benchristel): there are some content items where value is a\n // boolean, even though that makes no sense. We should figure out if\n // those content items are actually published anywhere, and consider\n // updating them.\n value: union(number).or(string).or(booleanToString).parser,\n customKeypad: optional(boolean),\n }),\n);\n","import {\n array,\n boolean,\n constant,\n enumeration,\n number,\n object,\n optional,\n pair,\n pipeParsers,\n string,\n union,\n} from \"../general-purpose-parsers\";\nimport {convert} from \"../general-purpose-parsers/convert\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\nimport {discriminatedUnionOn} from \"../general-purpose-parsers/discriminated-union\";\n\nimport {parsePerseusImageBackground} from \"./perseus-image-background\";\nimport {parseWidget} from \"./widget\";\n\nimport type {\n InteractionWidget,\n PerseusInteractionElement,\n} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nconst pairOfNumbers = pair(number, number);\nconst stringOrEmpty = defaulted(string, () => \"\");\n\nconst parseKey = pipeParsers(optional(string)).then(convert(String)).parser;\n\ntype FunctionElement = Extract<PerseusInteractionElement, {type: \"function\"}>;\nconst parseFunctionElement: Parser<FunctionElement> = object({\n type: constant(\"function\"),\n key: parseKey,\n options: object({\n value: string,\n funcName: string,\n rangeMin: string,\n rangeMax: string,\n color: string,\n strokeDasharray: string,\n strokeWidth: number,\n }),\n});\n\ntype LabelElement = Extract<PerseusInteractionElement, {type: \"label\"}>;\nconst parseLabelElement: Parser<LabelElement> = object({\n type: constant(\"label\"),\n key: parseKey,\n options: object({\n label: string,\n color: string,\n coordX: string,\n coordY: string,\n }),\n});\n\ntype LineElement = Extract<PerseusInteractionElement, {type: \"line\"}>;\nconst parseLineElement: Parser<LineElement> = object({\n type: constant(\"line\"),\n key: parseKey,\n options: object({\n color: string,\n startX: string,\n startY: string,\n endX: string,\n endY: string,\n strokeDasharray: string,\n strokeWidth: number,\n arrows: string,\n }),\n});\n\ntype MovableLineElement = Extract<\n PerseusInteractionElement,\n {type: \"movable-line\"}\n>;\nconst parseMovableLineElement: Parser<MovableLineElement> = object({\n type: constant(\"movable-line\"),\n key: parseKey,\n options: object({\n startX: string,\n startY: string,\n startSubscript: number,\n endX: string,\n endY: string,\n endSubscript: number,\n constraint: string,\n snap: number,\n constraintFn: string,\n constraintXMin: string,\n constraintXMax: string,\n constraintYMin: string,\n constraintYMax: string,\n }),\n});\n\ntype MovablePointElement = Extract<\n PerseusInteractionElement,\n {type: \"movable-point\"}\n>;\nconst parseMovablePointElement: Parser<MovablePointElement> = object({\n type: constant(\"movable-point\"),\n key: parseKey,\n options: object({\n startX: string,\n startY: string,\n varSubscript: number,\n constraint: string,\n snap: number,\n constraintFn: string,\n constraintXMin: stringOrEmpty,\n constraintXMax: stringOrEmpty,\n constraintYMin: stringOrEmpty,\n constraintYMax: stringOrEmpty,\n }),\n});\n\ntype ParametricElement = Extract<\n PerseusInteractionElement,\n {type: \"parametric\"}\n>;\nconst parseParametricElement: Parser<ParametricElement> = object({\n type: constant(\"parametric\"),\n key: parseKey,\n options: object({\n x: string,\n y: string,\n rangeMin: string,\n rangeMax: string,\n color: string,\n strokeDasharray: string,\n strokeWidth: number,\n }),\n});\n\ntype PointElement = Extract<PerseusInteractionElement, {type: \"point\"}>;\nconst parsePointElement: Parser<PointElement> = object({\n type: constant(\"point\"),\n key: parseKey,\n options: object({\n color: string,\n coordX: string,\n coordY: string,\n }),\n});\n\ntype RectangleElement = Extract<PerseusInteractionElement, {type: \"rectangle\"}>;\nconst parseRectangleElement: Parser<RectangleElement> = object({\n type: constant(\"rectangle\"),\n key: parseKey,\n options: object({\n color: string,\n coordX: string,\n coordY: string,\n width: string,\n height: string,\n }),\n});\n\nexport const parseInteractionWidget: Parser<InteractionWidget> = parseWidget(\n constant(\"interaction\"),\n object({\n static: defaulted(boolean, () => false),\n graph: object({\n editableSettings: optional(array(enumeration(\"canvas\", \"graph\"))),\n box: pairOfNumbers,\n labels: array(string),\n range: pair(pairOfNumbers, pairOfNumbers),\n gridStep: pairOfNumbers,\n markings: enumeration(\"graph\", \"grid\", \"none\"),\n snapStep: optional(pairOfNumbers),\n valid: optional(union(boolean).or(string).parser),\n backgroundImage: optional(parsePerseusImageBackground),\n showProtractor: optional(boolean),\n showRuler: optional(boolean),\n rulerLabel: optional(string),\n rulerTicks: optional(number),\n tickStep: pairOfNumbers,\n }),\n elements: array(\n discriminatedUnionOn(\"type\")\n .withBranch(\"function\", parseFunctionElement)\n .withBranch(\"label\", parseLabelElement)\n .withBranch(\"line\", parseLineElement)\n .withBranch(\"movable-line\", parseMovableLineElement)\n .withBranch(\"movable-point\", parseMovablePointElement)\n .withBranch(\"parametric\", parseParametricElement)\n .withBranch(\"point\", parsePointElement)\n .withBranch(\"rectangle\", parseRectangleElement).parser,\n ),\n }),\n);\n","/**\n * The Perseus \"data schema\" file.\n *\n * This file, and the types in it, represents the \"data schema\" that Perseus\n * uses. The @khanacademy/perseus-editor package edits and produces objects\n * that conform to the types in this file. Similarly, the top-level renderers\n * in @khanacademy/perseus, consume objects that conform to these types.\n *\n * WARNING: This file should not import any types from elsewhere so that it is\n * easy to reason about changes that alter the Perseus schema. This helps\n * ensure that it is not changed accidentally when upgrading a dependant\n * package or other part of Perseus code. Note that TypeScript does type\n * checking via something called \"structural typing\". This means that as long\n * as the shape of a type matches, the name it goes by doesn't matter. As a\n * result, a `Coord` type that looks like this `[x: number, y: number]` is\n * _identical_, in TypeScript's eyes, to this `Vector2` type `[x: number, y:\n * number]`. Also, with tuples, the labels for each entry is ignored, so `[x:\n * number, y: number]` is compatible with `[min: number, max: number]`. The\n * labels are for humans, not TypeScript. :)\n *\n * If you make changes to types in this file, be very sure that:\n *\n * a) the changes are backwards compatible. If they are not, old data from\n * previous versions of the \"schema\" could become unrenderable, or worse,\n * introduce hard-to-diagnose bugs.\n * b) the parsing code (`util/parse-perseus-json/`) is updated to handle\n * the new format _as well as_ the old format.\n */\n\n// TODO(FEI-4010): Remove `Perseus` prefix for all types here\n\nexport type Coord = [x: number, y: number];\nexport type Interval = [min: number, max: number];\nexport type Vector2 = Coord; // Same name as Mafs\nexport type Range = Interval;\nexport type Size = [width: number, height: number];\nexport type CollinearTuple = [Vector2, Vector2];\nexport type ShowSolutions = \"all\" | \"selected\" | \"none\";\n\n/**\n * A utility type that constructs a widget map from a \"registry interface\".\n * The keys of the registry should be the widget type (aka, \"categorizer\" or\n * \"radio\", etc) and the value should be the option type stored in the value\n * of the map.\n *\n * You can think of this as a type that generates another type. We use\n * \"registry interfaces\" as a way to keep a set of widget types to their data\n * type in several places in Perseus. This type then allows us to generate a\n * map type that maps a widget id to its data type and keep strong typing by\n * widget id.\n *\n * For example, given a fictitious registry such as this:\n *\n * ```\n * interface DummyRegistry {\n * categorizer: { categories: ReadonlyArray<string> };\n * dropdown: { choices: ReadonlyArray<string> }:\n * }\n * ```\n *\n * If we create a DummyMap using this helper:\n *\n * ```\n * type DummyMap = MakeWidgetMap<DummyRegistry>;\n * ```\n *\n * We'll get a map that looks like this:\n *\n * ```\n * type DummyMap = {\n * `categorizer ${number}`: { categories: ReadonlyArray<string> };\n * `dropdown ${number}`: { choices: ReadonlyArray<string> };\n * }\n * ```\n *\n * We use interfaces for the registries so that they can be extended in cases\n * where the consuming app brings along their own widgets. Interfaces in\n * TypeScript are always open (ie. you can extend them) whereas types aren't.\n */\nexport type MakeWidgetMap<TRegistry> = {\n [Property in keyof TRegistry as `${Property & string} ${number}`]: TRegistry[Property];\n};\n\n/**\n * Our core set of Perseus widgets.\n *\n * This interface is the basis for \"registering\" all Perseus widget types.\n * There should be one key/value pair for each supported widget. If you create\n * a new widget, an entry should be added to this interface. Note that this\n * only registers the widget options type, you'll also need to register the\n * widget so that it's available at runtime (@see\n * {@link file://./widgets.ts#registerWidget}).\n *\n * Importantly, the key should be the name that is used in widget IDs. For most\n * widgets that is the same as the widget option's `type` field. In cases where\n * a widget has been deprecated and replaced with the deprecated-standin\n * widget, it should be the original widget type!\n *\n * If you define the widget outside of this package, you can still add the new\n * widget to this interface by writing the following in that package that\n * contains the widget. TypeScript will merge that definition of the\n * `PerseusWidgets` with the one defined below.\n *\n * ```typescript\n * declare module \"@khanacademy/perseus-core\" {\n * interface PerseusWidgetTypes {\n * // A new widget\n * \"new-awesomeness\": MyAwesomeNewWidget;\n *\n * // A deprecated widget\n * \"super-old-widget\": DeprecatedStandinWidget;\n * }\n * }\n *\n * // The new widget's options definition\n * type MyAwesomeNewWidget = WidgetOptions<'new-awesomeness', MyAwesomeNewWidgetOptions>;\n *\n * // The deprecated widget's options definition\n * type SuperOldWidget = WidgetOptions<'super-old-widget', object>;\n * ```\n *\n * This interface can be extended through the magic of TypeScript \"Declaration\n * merging\". Specifically, we augment this module and extend this interface.\n *\n * @see {@link https://www.typescriptlang.org/docs/handbook/declaration-merging.html#module-augmentation}\n */\nexport interface PerseusWidgetTypes {\n categorizer: CategorizerWidget;\n \"cs-program\": CSProgramWidget;\n definition: DefinitionWidget;\n dropdown: DropdownWidget;\n explanation: ExplanationWidget;\n expression: ExpressionWidget;\n grapher: GrapherWidget;\n \"graded-group-set\": GradedGroupSetWidget;\n \"graded-group\": GradedGroupWidget;\n group: GroupWidget;\n iframe: IFrameWidget;\n image: ImageWidget;\n \"input-number\": InputNumberWidget;\n interaction: InteractionWidget;\n \"interactive-graph\": InteractiveGraphWidget;\n \"label-image\": LabelImageWidget;\n matcher: MatcherWidget;\n matrix: MatrixWidget;\n measurer: MeasurerWidget;\n \"molecule-renderer\": MoleculeRendererWidget;\n \"number-line\": NumberLineWidget;\n \"numeric-input\": NumericInputWidget;\n orderer: OrdererWidget;\n \"passage-ref-target\": RefTargetWidget;\n \"passage-ref\": PassageRefWidget;\n passage: PassageWidget;\n \"phet-simulation\": PhetSimulationWidget;\n \"python-program\": PythonProgramWidget;\n plotter: PlotterWidget;\n radio: RadioWidget;\n sorter: SorterWidget;\n table: TableWidget;\n video: VideoWidget;\n\n // Deprecated widgets\n \"lights-puzzle\": DeprecatedStandinWidget;\n sequence: DeprecatedStandinWidget;\n simulator: DeprecatedStandinWidget;\n transformer: DeprecatedStandinWidget;\n}\n\n/**\n * A map of widget IDs to widget options. This is most often used as the type\n * for a set of widgets defined in a `PerseusItem` but can also be useful to\n * represent a function parameter where only `widgets` from a `PerseusItem` are\n * needed. Today Widget IDs are made up of the widget type and an incrementing\n * integer (eg. `interactive-graph 1` or `radio 3`). It is suggested to avoid\n * reading/parsing the widget id to derive any information from it, except in\n * the case of this map.\n *\n * @see {@link PerseusWidgetTypes} additional widgets can be added to this map type\n * by augmenting the PerseusWidgetTypes with new widget types!\n */\nexport type PerseusWidgetsMap = MakeWidgetMap<PerseusWidgetTypes>;\n\n/**\n * PerseusWidget is a union of all the different types of widget options that\n * Perseus knows about.\n *\n * Thanks to it being based on PerseusWidgetTypes interface, this union is\n * automatically extended to include widgets used in tests without those widget\n * option types seeping into our production types.\n *\n * @see MockWidget for an example\n */\nexport type PerseusWidget = PerseusWidgetTypes[keyof PerseusWidgetTypes];\n\n/**\n * A \"PerseusItem\" is a classic Perseus item. It is rendered by the\n * `ServerItemRenderer` and the layout is pre-set.\n *\n * To render more complex Perseus items, see the `Item` type in the multi item\n * area.\n */\nexport type PerseusItem = {\n // The details of the question being asked to the user.\n question: PerseusRenderer;\n // A collection of hints to be offered to the user that support answering the question.\n hints: ReadonlyArray<Hint>;\n // Details about the tools the user might need to answer the question\n answerArea: PerseusAnswerArea | null | undefined;\n /**\n * The version of the item.\n * @deprecated Not used.\n */\n itemDataVersion: any;\n /**\n * @deprecated Superseded by per-widget answers.\n */\n answer: any;\n};\n\n/**\n * A \"PerseusArticle\" is an item that is meant to be rendered as an article.\n * This item is never scored and is rendered by the `ArticleRenderer`.\n */\nexport type PerseusArticle = PerseusRenderer | ReadonlyArray<PerseusRenderer>;\n\nexport type Version = {\n // The major part of the version\n major: number;\n // The minor part of the version\n minor: number;\n};\n\nexport type PerseusRenderer = {\n /**\n * Translatable Markdown content to be rendered. May include references to\n * widgets (as [[☃ widgetName]]) or images (as ![image text](imageUrl)).\n * For each image found in this content, there can be an entry in the\n * `images` dict (below) with the key being the image's url which defines\n * additional attributes for the image.\n */\n content: string;\n /**\n * A dictionary of {[widgetName]: Widget} to be referenced from the content\n * field.\n */\n widgets: PerseusWidgetsMap;\n /**\n * Formerly used in the PerseusGradedGroup widget. A list of \"tags\" that\n * are keys that represent other content in the system. Not rendered to\n * the user. NOTE: perseus_data.go says this is required even though it\n * isn't necessary.\n * @deprecated\n */\n metadata?: any;\n /**\n * A dictionary of {[imageUrl]: PerseusImageDetail}.\n */\n images: {\n [imageUrl: string]: PerseusImageDetail;\n };\n};\n\nexport type Hint = PerseusRenderer & {\n /**\n * When `true`, causes the previous hint to be replaced with this hint when\n * displayed. When `false`, the previous hint remains visible when this one\n * is displayed. This allows for hints that build upon each other.\n */\n replace?: boolean;\n};\n\nexport type PerseusImageDetail = {\n // The width of the image\n width: number;\n // the height of the image\n height: number;\n};\n\nexport const ItemExtras = [\n // The user might benefit from using a Scientific Calculator. Provided on Khan Academy when true\n \"calculator\",\n // The user might benefit from using a statistics Chi Squared Table like https://people.richland.edu/james/lecture/m170/tbl-chi.html\n \"chi2Table\",\n // The user might benefit from a monthly payments calculator. Provided on Khan Academy when true\n \"financialCalculatorMonthlyPayment\",\n // The user might benefit from a total amount calculator. Provided on Khan Academy when true\n \"financialCalculatorTotalAmount\",\n // The user might benefit from a time to pay off calculator. Provided on Khan Academy when true\n \"financialCalculatorTimeToPayOff\",\n // The user might benefit from using a Periodic Table of Elements. Provided on Khan Academy when true\n \"periodicTable\",\n // The user might benefit from using a Periodic Table of Elements with key. Provided on Khan Academy when true\n \"periodicTableWithKey\",\n // The user might benefit from using a statistics T Table like https://www.statisticshowto.com/tables/t-distribution-table/\n \"tTable\",\n // The user might benefit from using a statistics Z Table like https://www.ztable.net/\n \"zTable\",\n] as const;\nexport type PerseusAnswerArea = Record<(typeof ItemExtras)[number], boolean>;\n\n/**\n * The type representing the common structure of all widget's options. The\n * `Options` generic type represents the widget-specific option data.\n */\nexport type WidgetOptions<Type extends string, Options> = {\n // The \"type\" of widget which will define what the Options field looks like\n type: Type;\n // Whether this widget is displayed with the values and is immutable. For display only\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n static?: boolean;\n // Whether a widget is scored. Usually true except for IFrame widgets (deprecated)\n // Default: true\n graded?: boolean;\n // The HTML alignment of the widget. \"default\" or \"block\"\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n alignment?: string;\n // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details\n options: Options;\n // Only used by interactive child widgets (line, point, etc) to identify the components\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n key?: number | null;\n // The version of the widget data spec. Used to differentiate between newer and older content data.\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n version?: Version;\n};\n\n// prettier-ignore\nexport type CategorizerWidget = WidgetOptions<'categorizer', PerseusCategorizerWidgetOptions>;\n// prettier-ignore\nexport type CSProgramWidget = WidgetOptions<'cs-program', PerseusCSProgramWidgetOptions>;\n// prettier-ignore\nexport type DefinitionWidget = WidgetOptions<'definition', PerseusDefinitionWidgetOptions>;\n// prettier-ignore\nexport type DropdownWidget = WidgetOptions<'dropdown', PerseusDropdownWidgetOptions>;\n// prettier-ignore\nexport type ExplanationWidget = WidgetOptions<'explanation', PerseusExplanationWidgetOptions>;\n// prettier-ignore\nexport type ExpressionWidget = WidgetOptions<'expression', PerseusExpressionWidgetOptions>;\n// prettier-ignore\nexport type GradedGroupSetWidget = WidgetOptions<'graded-group-set', PerseusGradedGroupSetWidgetOptions>;\n// prettier-ignore\nexport type GradedGroupWidget = WidgetOptions<'graded-group', PerseusGradedGroupWidgetOptions>;\n// prettier-ignore\nexport type GrapherWidget = WidgetOptions<'grapher', PerseusGrapherWidgetOptions>;\n// prettier-ignore\nexport type GroupWidget = WidgetOptions<'group', PerseusGroupWidgetOptions>;\n// prettier-ignore\nexport type IFrameWidget = WidgetOptions<'iframe', PerseusIFrameWidgetOptions>;\n// prettier-ignore\nexport type ImageWidget = WidgetOptions<'image', PerseusImageWidgetOptions>;\n// prettier-ignore\nexport type InteractionWidget = WidgetOptions<'interaction', PerseusInteractionWidgetOptions>;\n// prettier-ignore\nexport type InteractiveGraphWidget = WidgetOptions<'interactive-graph', PerseusInteractiveGraphWidgetOptions>;\n// prettier-ignore\nexport type LabelImageWidget = WidgetOptions<'label-image', PerseusLabelImageWidgetOptions>;\n// prettier-ignore\nexport type MatcherWidget = WidgetOptions<'matcher', PerseusMatcherWidgetOptions>;\n// prettier-ignore\nexport type MatrixWidget = WidgetOptions<'matrix', PerseusMatrixWidgetOptions>;\n// prettier-ignore\nexport type MeasurerWidget = WidgetOptions<'measurer', PerseusMeasurerWidgetOptions>;\n// prettier-ignore\nexport type NumberLineWidget = WidgetOptions<'number-line', PerseusNumberLineWidgetOptions>;\n// prettier-ignore\nexport type NumericInputWidget = WidgetOptions<'numeric-input', PerseusNumericInputWidgetOptions>;\n// prettier-ignore\nexport type OrdererWidget = WidgetOptions<'orderer', PerseusOrdererWidgetOptions>;\n// prettier-ignore\nexport type PassageRefWidget = WidgetOptions<'passage-ref', PerseusPassageRefWidgetOptions>;\n// prettier-ignore\nexport type PassageWidget = WidgetOptions<'passage', PerseusPassageWidgetOptions>;\n// prettier-ignore\nexport type PhetSimulationWidget = WidgetOptions<'phet-simulation', PerseusPhetSimulationWidgetOptions>;\n// prettier-ignore\nexport type PlotterWidget = WidgetOptions<'plotter', PerseusPlotterWidgetOptions>;\n// prettier-ignore\nexport type PythonProgramWidget = WidgetOptions<'python-program', PerseusPythonProgramWidgetOptions>;\n// prettier-ignore\nexport type RadioWidget = WidgetOptions<'radio', PerseusRadioWidgetOptions>;\n// prettier-ignore\nexport type SorterWidget = WidgetOptions<'sorter', PerseusSorterWidgetOptions>;\n// prettier-ignore\nexport type TableWidget = WidgetOptions<'table', PerseusTableWidgetOptions>;\n// prettier-ignore\nexport type InputNumberWidget = WidgetOptions<'input-number', PerseusInputNumberWidgetOptions>;\n// prettier-ignore\nexport type MoleculeRendererWidget = WidgetOptions<'molecule-renderer', PerseusMoleculeRendererWidgetOptions>;\n// prettier-ignore\nexport type RefTargetWidget = WidgetOptions<'passage-ref-target', PerseusPassageRefTargetWidgetOptions>;\n// prettier-ignore\nexport type VideoWidget = WidgetOptions<'video', PerseusVideoWidgetOptions>;\n//prettier-ignore\nexport type DeprecatedStandinWidget = WidgetOptions<'deprecated-standin', object>;\n\n/**\n * A background image applied to various widgets.\n */\nexport type PerseusImageBackground = {\n // The URL of the image\n url: string | null | undefined;\n // The width of the image\n width?: number;\n // The height of the image\n height?: number;\n // The top offset of the image\n // NOTE: perseus_data.go says this is required, but nullable, even though\n // it isn't necessary at all.\n top?: number;\n // The left offset of the image\n // NOTE: perseus_data.go says this is required, but nullable, even though\n // it isn't necessary at all.\n left?: number;\n // The scale of the image\n // NOTE: perseus_data.go says this is required, but nullable, even though\n // it isn't necessary at all.\n scale?: number;\n // The bottom offset of the image\n // NOTE: perseus_data.go says this is required, but nullable, even though\n // it isn't necessary at all.\n bottom?: number;\n};\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 */\nexport type MarkingsType = \"axes\" | \"graph\" | \"grid\" | \"none\";\n\nexport type PerseusCategorizerWidgetOptions = {\n // Translatable text; a list of items to categorize. e.g. [\"banana\", \"yellow\", \"apple\", \"purple\", \"shirt\"]\n items: ReadonlyArray<string>;\n // Translatable text; a list of categories. e.g. [\"fruits\", \"colors\", \"clothing\"]\n categories: ReadonlyArray<string>;\n // Whether the items should be randemized\n randomizeItems: boolean;\n // Whether this widget is displayed with the results and immutable\n static: boolean;\n // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2]\n values: ReadonlyArray<number>;\n // Whether we should highlight i18n linter errors found on this widget\n highlightLint?: boolean;\n // Internal editor configuration. Can be ignored by consumers.\n linterContext?: PerseusLinterContext;\n};\n\nexport type PerseusLinterContext = {\n contentType: string;\n paths: ReadonlyArray<string>;\n stack: ReadonlyArray<string>;\n};\n\nexport type PerseusDefinitionWidgetOptions = {\n // Translatable text; the word to define. e.g. \"vertex\"\n togglePrompt: string;\n // Translatable text; the definition of the word. e.g. \"where 2 rays connect\"\n definition: string;\n // Always false. Not used for this widget\n static: boolean;\n};\n\nexport type PerseusDropdownWidgetOptions = {\n // A list of choices for the dropdown\n choices: ReadonlyArray<PerseusDropdownChoice>;\n // Translatable Text; placeholder text for a dropdown. e.g. \"Please select a fruit\"\n placeholder: string;\n // Always false. Not used for this widget\n static: boolean;\n // Translatable Text; visible label for the dropdown\n visibleLabel?: string;\n // Translatable Text; aria label that screen readers will read\n ariaLabel?: string;\n};\n\nexport type PerseusDropdownChoice = {\n // Translatable text; The text for the option. e.g. \"Banana\" or \"Orange\"\n content: string;\n // Whether this is the correct option or not\n correct: boolean;\n};\n\nexport type PerseusExplanationWidgetOptions = {\n // Translatable Text; The clickable text to expand an explanation. e.g. \"What is an apple?\"\n showPrompt: string;\n // Translatable Text; The cliclable text to hide an explanation. e.g. \"Thanks. I got it!\"\n hidePrompt: string;\n // Translatable Markdown; The explanation that is shown when showPrompt is clicked. e.g. \"An apple is a tasty fruit.\"\n explanation: string;\n // explanation fields can embed widgets. When they do, the details of the widgets are here.\n widgets: PerseusWidgetsMap;\n // Always false. Not used for this widget\n static: boolean;\n};\n\nexport type LegacyButtonSets = ReadonlyArray<\n | \"basic\"\n | \"basic+div\"\n | \"trig\"\n | \"prealgebra\"\n | \"logarithms\"\n | \"basic relations\"\n | \"advanced relations\"\n | \"scientific\"\n>;\n\nexport type PerseusExpressionWidgetOptions = {\n // The expression forms the answer may come in\n answerForms: ReadonlyArray<PerseusExpressionAnswerForm>;\n buttonSets: LegacyButtonSets;\n // Variables that can be used as functions. Default: [\"f\", \"g\", \"h\"]\n functions: ReadonlyArray<string>;\n // Use x for rendering multiplication instead of a center dot.\n times: boolean;\n // visible label associated with the MathQuill field\n visibleLabel?: string;\n // aria label for screen readers attached to MathQuill field\n ariaLabel?: string;\n // Controls when buttons for special characters are visible when using a\n // desktop browser. Defaults to \"focused\".\n // NOTE: This isn't listed in perseus-format.js or perseus_data.go, but\n // appears in item data in the datastore.\n buttonsVisible?: \"always\" | \"never\" | \"focused\";\n};\n\nexport const PerseusExpressionAnswerFormConsidered = [\n \"correct\",\n \"wrong\",\n \"ungraded\",\n] as const;\n\nexport type PerseusExpressionAnswerForm = {\n // The TeX form of the expression. e.g. \"x\\\\cdot3=y\"\n value: string;\n // The Answer expression must have the same form\n form: boolean;\n // The answer expression must be fully expanded and simplified\n simplify: boolean;\n // Whether the form is considered \"correct\", \"wrong\", or \"ungraded\"\n considered: (typeof PerseusExpressionAnswerFormConsidered)[number];\n // A key to identify the answer form in a list\n // NOTE: perseus-format.js says this is required even though it isn't necessary.\n key?: string;\n};\n\nexport type PerseusGradedGroupWidgetOptions = {\n // Translatable Text; A title to be displayed for the group.\n title: string;\n // Not used in Perseus (but is set in (en, pt) production data)\n hasHint?: boolean | null | undefined;\n // A section to define hints for the group.\n hint?: PerseusRenderer | null | undefined;\n // Translatable Markdown. May include widgets and images embedded.\n content: string;\n // See PerseusRenderer.widgets\n widgets: PerseusWidgetsMap;\n // Not used in Perseus\n widgetEnabled?: boolean | null | undefined;\n // Not used in Perseus\n immutableWidgets?: boolean | null | undefined;\n // See PerseusRenderer.images\n images: {\n [key: string]: PerseusImageDetail;\n };\n};\n\nexport type PerseusGradedGroupSetWidgetOptions = {\n // A list of Widget Groups\n gradedGroups: ReadonlyArray<PerseusGradedGroupWidgetOptions>;\n};\n\n// 2D range: xMin, xMax, yMin, yMax\nexport type GraphRange = [\n x: [min: number, max: number],\n y: [min: number, max: number],\n];\n\nexport type GrapherAnswerTypes =\n | {\n type: \"absolute_value\";\n // If `coords` is null, the graph will not be gradable. All answers\n // will be scored as invalid.\n coords: null | [vertex: Coord, secondPoint: Coord];\n }\n | {\n type: \"exponential\";\n // Two points along the asymptote line. Usually (always?) a\n // horizontal or vertical line.\n asymptote: [Coord, Coord];\n // Two points along the exponential curve. One end of the curve\n // trends towards the asymptote.\n // If `coords` is null, the graph will not be gradable. All answers\n // will be scored as invalid.\n coords: null | [Coord, Coord];\n }\n | {\n type: \"linear\";\n // Two points along the straight line\n // If coords is null, the graph will not be gradable. All answers\n // will be scored as invalid.\n coords: null | [Coord, Coord];\n }\n | {\n type: \"logarithm\";\n // Two points along the asymptote line.\n asymptote: [Coord, Coord];\n // Two points along the logarithmic curve. One end of the curve\n // trends towards the asymptote.\n // If coords is null, the graph will not be gradable. All answers\n // will be scored as invalid.\n coords: null | [Coord, Coord];\n }\n | {\n type: \"quadratic\";\n // If coords is null, the graph will not be gradable. All answers\n // will be scored as invalid.\n coords: null | [vertex: Coord, secondPoint: Coord];\n }\n | {\n type: \"sinusoid\";\n // Two points on the same slope in the sinusoid wave line.\n // If coords is null, the graph will not be gradable. All answers\n // will be scored as invalid.\n coords: null | [Coord, Coord];\n }\n | {\n type: \"tangent\";\n // Two points on the same slope in the tangent wave line.\n // If coords is null, the graph will not be gradable. All answers\n // will be scored as invalid.\n coords: null | [Coord, Coord];\n };\n\nexport type PerseusGrapherWidgetOptions = {\n availableTypes: ReadonlyArray<\n | \"absolute_value\"\n | \"exponential\"\n | \"linear\"\n | \"logarithm\"\n | \"quadratic\"\n | \"sinusoid\"\n | \"tangent\"\n >;\n correct: GrapherAnswerTypes;\n graph: {\n backgroundImage: {\n bottom?: number;\n height?: number;\n left?: number;\n scale?: number;\n url?: string | null | undefined;\n width?: number;\n };\n box?: [number, number];\n editableSettings?: ReadonlyArray<\n \"graph\" | \"snap\" | \"image\" | \"measure\"\n >;\n gridStep?: [number, number];\n labels: [string, string];\n markings: MarkingsType;\n range: GraphRange;\n rulerLabel: \"\";\n rulerTicks: number;\n showProtractor?: boolean;\n showRuler?: boolean;\n showTooltips?: boolean;\n snapStep?: [number, number];\n step: [number, number];\n valid?: boolean | string;\n };\n};\n\nexport type PerseusGroupWidgetOptions = PerseusRenderer;\n\nexport type PerseusImageWidgetOptions = {\n // Translatable Markdown; Text to be shown for the title of the image\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n title?: string;\n // Translatable Markdown; Text to be shown in the caption section of an image\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n caption?: string;\n // Translatable Text; The alt text to be shown in the img.alt attribute\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n alt?: string;\n // The image details for the image to be displayed\n backgroundImage: PerseusImageBackground;\n // Always false. Not used for this widget\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n static?: boolean;\n // A list of labels to display on the image\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n labels?: ReadonlyArray<PerseusImageLabel>;\n // The range on the image render for labels\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n range?: [Interval, Interval];\n // The box on the image render for labels. The same as backgroundImage.width and backgroundImage.height\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n box?: Size;\n};\n\nexport type PerseusImageLabel = {\n // Translatable Text; The content of the label to display\n content: string;\n // The visual alignment of the label. default: \"center\"\n alignment: string;\n // The point on the image to display the label\n coordinates: ReadonlyArray<number>;\n};\n\nexport type PerseusInteractiveGraphWidgetOptions = {\n // Where the little black axis lines & labels (ticks) should render.\n // Also known as the tick step. default [1, 1]\n // NOTE(kevinb): perseus_data.go defines this as Array<number>\n step: [number, number];\n // Where the grid lines on the graph will render. default [1, 1]\n // NOTE(kevinb): perseus_data.go defines this as Array<number>\n gridStep?: [x: number, y: number];\n // Where the graph points will lock to when they are dragged. default [0.5, 0.5]\n // NOTE(kevinb): perseus_data.go defines this as Array<number>\n snapStep?: [x: number, y: number];\n // An optional image to use in the background\n backgroundImage?: PerseusImageBackground;\n /**\n * The type of markings to display on the graph.\n */\n markings: MarkingsType;\n // How to label the X and Y axis. default: [\"x\", \"y\"]\n labels?: ReadonlyArray<string>;\n // Whether to show the Protractor tool overlayed on top of the graph\n showProtractor: boolean;\n /**\n * Whether to show the Ruler tool overlayed on top of the graph.\n * @deprecated - no longer used by the InteractiveGraph widget. The\n * property is kept on this type to prevent its accidental reuse in future\n * features, since it may appear in production data.\n */\n showRuler?: boolean;\n // Whether to show tooltips on the graph\n showTooltips?: boolean;\n /**\n * The unit to show on the ruler. e.g. \"mm\", \"cm\", \"m\", \"km\", \"in\", \"ft\",\n * \"yd\", \"mi\".\n * @deprecated - no longer used by the InteractiveGraph widget. The\n * property is kept on this type to prevent its accidental reuse in future\n * features, since it may appear in production data.\n */\n rulerLabel?: string;\n /**\n * How many ticks to show on the ruler. e.g. 1, 2, 4, 8, 10, 16. Must be\n * an integer.\n * @deprecated - no longer used by the InteractiveGraph widget. The\n * property is kept on this type to prevent its accidental reuse in future\n * features, since it may appear in production data.\n */\n rulerTicks?: number;\n // The X and Y coordinate ranges for the view of the graph. default: [[-10, 10], [-10, 10]]\n // NOTE(kevinb): perseus_data.go defines this as Array<Array<number>>\n // TODO(kevinb): Add a transform function to interactive-graph.jsx to\n // rename `range` to `ranges` so that things are less confusing.\n range: GraphRange;\n // The type of graph\n graph: PerseusGraphType;\n // The correct kind of graph, if being used to select function type\n // TODO(LEMS-2344): make the type of `correct` more specific\n correct: PerseusGraphType;\n // Shapes (points, chords, etc) displayed on the graph that cannot\n // be moved by the user.\n lockedFigures?: ReadonlyArray<LockedFigure>;\n // Aria label that applies to the entire graph.\n fullGraphAriaLabel?: string;\n // Aria description that applies to the entire graph.\n fullGraphAriaDescription?: string;\n};\n\nexport const lockedFigureColorNames = [\n \"blue\",\n \"green\",\n \"grayH\",\n \"purple\",\n \"pink\",\n \"orange\",\n \"red\",\n] as const;\n\nexport type LockedFigureColor = (typeof lockedFigureColorNames)[number];\n\nexport const lockedFigureColors: Record<LockedFigureColor, string> = {\n blue: \"#3D7586\",\n green: \"#447A53\",\n grayH: \"#3B3D45\",\n purple: \"#594094\",\n pink: \"#B25071\",\n red: \"#D92916\",\n orange: \"#946700\",\n} as const;\n\nexport type LockedFigure =\n | LockedPointType\n | LockedLineType\n | LockedVectorType\n | LockedEllipseType\n | LockedPolygonType\n | LockedFunctionType\n | LockedLabelType;\nexport type LockedFigureType = LockedFigure[\"type\"];\n\nexport type LockedLineStyle = \"solid\" | \"dashed\";\n\nexport type LockedPointType = {\n type: \"point\";\n coord: Coord;\n color: LockedFigureColor;\n filled: boolean;\n labels?: LockedLabelType[];\n ariaLabel?: string;\n};\n\nexport type LockedLineType = {\n type: \"line\";\n kind: \"line\" | \"ray\" | \"segment\";\n points: [point1: LockedPointType, point2: LockedPointType];\n color: LockedFigureColor;\n lineStyle: LockedLineStyle;\n showPoint1: boolean;\n showPoint2: boolean;\n labels?: LockedLabelType[];\n ariaLabel?: string;\n};\n\nexport type LockedVectorType = {\n type: \"vector\";\n points: [tail: Coord, tip: Coord];\n color: LockedFigureColor;\n labels?: LockedLabelType[];\n ariaLabel?: string;\n};\n\nexport type LockedFigureFillType = \"none\" | \"white\" | \"translucent\" | \"solid\";\nexport const lockedFigureFillStyles: Record<LockedFigureFillType, number> = {\n none: 0,\n white: 1,\n translucent: 0.4,\n solid: 1,\n} as const;\n\nexport type LockedEllipseType = {\n type: \"ellipse\";\n center: Coord;\n radius: [x: number, y: number];\n angle: number;\n color: LockedFigureColor;\n fillStyle: LockedFigureFillType;\n strokeStyle: LockedLineStyle;\n labels?: LockedLabelType[];\n ariaLabel?: string;\n};\n\nexport type LockedPolygonType = {\n type: \"polygon\";\n points: ReadonlyArray<Coord>;\n color: LockedFigureColor;\n showVertices: boolean;\n fillStyle: LockedFigureFillType;\n strokeStyle: LockedLineStyle;\n labels?: LockedLabelType[];\n ariaLabel?: string;\n};\n\nexport type LockedFunctionType = {\n type: \"function\";\n color: LockedFigureColor;\n strokeStyle: LockedLineStyle;\n equation: string; // This is the user-defined equation (as it was typed)\n directionalAxis: \"x\" | \"y\";\n domain?: [min: number | null, max: number | null];\n labels?: LockedLabelType[];\n ariaLabel?: string;\n};\n\n// Not associated with a specific figure\nexport type LockedLabelType = {\n type: \"label\";\n coord: Coord;\n // TeX-supported string\n text: string;\n color: LockedFigureColor;\n size: \"small\" | \"medium\" | \"large\";\n};\n\nexport type PerseusGraphType =\n | PerseusGraphTypeAngle\n | PerseusGraphTypeCircle\n | PerseusGraphTypeLinear\n | PerseusGraphTypeLinearSystem\n | PerseusGraphTypeNone\n | PerseusGraphTypePoint\n | PerseusGraphTypePolygon\n | PerseusGraphTypeQuadratic\n | PerseusGraphTypeRay\n | PerseusGraphTypeSegment\n | PerseusGraphTypeSinusoid;\n\ntype PerseusGraphTypeCommon = {\n // NOTE(jeremy): This is referenced in the component. Verify if there's any\n // production data that still has this.\n coord?: Coord; // Legacy!\n};\n\nexport type PerseusGraphTypeAngle = {\n type: \"angle\";\n // Whether to show the angle measurements. default: false\n showAngles?: boolean;\n // Allow Reflex Angles if an \"angle\" type. default: true\n allowReflexAngles?: boolean;\n // The angle offset in degrees if an \"angle\" type. default: 0\n angleOffsetDeg?: number;\n // Snap to degree increments if an \"angle\" type. default: 1\n snapDegrees?: number;\n // How to match the answer. If missing, defaults to exact matching.\n match?: \"congruent\";\n // must have 3 coords - ie [Coord, Coord, Coord]\n coords?: [Coord, Coord, Coord] | null;\n // The initial coordinates the graph renders with.\n startCoords?: [Coord, Coord, Coord];\n};\n\nexport type PerseusGraphTypeCircle = {\n type: \"circle\";\n center?: Coord;\n radius?: number;\n // The initial coordinates the graph renders with.\n startCoords?: {\n center: Coord;\n radius: number;\n };\n} & PerseusGraphTypeCommon;\n\nexport type PerseusGraphTypeLinear = {\n type: \"linear\";\n // expects 2 coords\n coords?: CollinearTuple | null;\n // The initial coordinates the graph renders with.\n startCoords?: CollinearTuple;\n} & PerseusGraphTypeCommon;\n\nexport type PerseusGraphTypeLinearSystem = {\n type: \"linear-system\";\n // expects 2 sets of 2 coords\n coords?: CollinearTuple[] | null;\n // The initial coordinates the graph renders with.\n startCoords?: CollinearTuple[];\n} & PerseusGraphTypeCommon;\n\nexport type PerseusGraphTypeNone = {\n type: \"none\";\n};\n\nexport type PerseusGraphTypePoint = {\n type: \"point\";\n // The number of points if a \"point\" type. default: 1. \"unlimited\" if no limit\n numPoints?: number | \"unlimited\";\n coords?: ReadonlyArray<Coord> | null;\n // The initial coordinates the graph renders with.\n startCoords?: ReadonlyArray<Coord>;\n} & PerseusGraphTypeCommon;\n\nexport type PerseusGraphTypePolygon = {\n type: \"polygon\";\n // The number of sides. default: 3. \"unlimited\" if no limit\n numSides?: number | \"unlimited\";\n // Whether to the angle measurements. default: false\n showAngles?: boolean;\n // Whether to show side measurements. default: false\n showSides?: boolean;\n // How to snap points. e.g. \"grid\", \"angles\", or \"sides\". default: grid\n snapTo?: \"grid\" | \"angles\" | \"sides\";\n // How to match the answer. If missing, defaults to exact matching.\n match?: \"similar\" | \"congruent\" | \"approx\" | \"exact\";\n coords?: ReadonlyArray<Coord> | null;\n // The initial coordinates the graph renders with.\n startCoords?: ReadonlyArray<Coord>;\n} & PerseusGraphTypeCommon;\n\nexport type PerseusGraphTypeQuadratic = {\n type: \"quadratic\";\n // expects a list of 3 coords\n coords?: [Coord, Coord, Coord] | null;\n // The initial coordinates the graph renders with.\n startCoords?: [Coord, Coord, Coord];\n} & PerseusGraphTypeCommon;\n\nexport type PerseusGraphTypeSegment = {\n type: \"segment\";\n // The number of segments if a \"segment\" type. default: 1. Max: 6\n numSegments?: number;\n // Expects a list of Coord tuples. Length should match the `numSegments` value.\n coords?: CollinearTuple[] | null;\n // The initial coordinates the graph renders with.\n startCoords?: CollinearTuple[];\n} & PerseusGraphTypeCommon;\n\nexport type PerseusGraphTypeSinusoid = {\n type: \"sinusoid\";\n // Expects a list of 2 Coords\n coords?: ReadonlyArray<Coord> | null;\n // The initial coordinates the graph renders with.\n startCoords?: ReadonlyArray<Coord>;\n} & PerseusGraphTypeCommon;\n\nexport type PerseusGraphTypeRay = {\n type: \"ray\";\n // Expects a list of 2 Coords\n coords?: CollinearTuple | null;\n // The initial coordinates the graph renders with.\n startCoords?: CollinearTuple;\n} & PerseusGraphTypeCommon;\n\ntype AngleGraphCorrect = {\n type: \"angle\";\n allowReflexAngles: boolean;\n match?: \"congruent\";\n coords: [Coord, Coord, Coord];\n};\n\ntype CircleGraphCorrect = {\n type: \"circle\";\n center: Coord;\n radius: number;\n};\n\ntype LinearGraphCorrect = {\n type: \"linear\";\n coords: CollinearTuple;\n};\n\ntype LinearSystemGraphCorrect = {\n type: \"linear-system\";\n coords: [CollinearTuple, CollinearTuple];\n};\n\ntype NoneGraphCorrect = {\n type: \"none\";\n};\n\ntype PointGraphCorrect = {\n type: \"point\";\n coords: ReadonlyArray<Coord>;\n};\n\ntype PolygonGraphCorrect = {\n type: \"polygon\";\n match: \"similar\" | \"congruent\" | \"approx\";\n coords: ReadonlyArray<Coord>;\n};\n\ntype QuadraticGraphCorrect = {\n type: \"quadratic\";\n coords: [Coord, Coord, Coord];\n};\n\ntype SegmentGraphCorrect = {\n type: \"segment\";\n coords: CollinearTuple[];\n};\n\ntype SinusoidGraphCorrect = {\n type: \"sinusoid\";\n coords: CollinearTuple;\n};\n\ntype RayGraphCorrect = {\n type: \"ray\";\n coords: CollinearTuple;\n};\n\nexport type PerseusGraphCorrectType =\n | AngleGraphCorrect\n | CircleGraphCorrect\n | LinearGraphCorrect\n | LinearSystemGraphCorrect\n | NoneGraphCorrect\n | PointGraphCorrect\n | PolygonGraphCorrect\n | QuadraticGraphCorrect\n | RayGraphCorrect\n | SegmentGraphCorrect\n | SinusoidGraphCorrect;\n\nexport type PerseusLabelImageWidgetOptions = {\n // Translatable Text; Tex representation of choices\n choices: ReadonlyArray<string>;\n // The URL of the image\n imageUrl: string;\n // Translatable Text; To show up in the img.alt attribute\n imageAlt: string;\n // The height of the image\n imageHeight: number;\n // The width of the image\n imageWidth: number;\n // A list of markers to display on the image\n markers: ReadonlyArray<PerseusLabelImageMarker>;\n // Do not display answer choices in instructions\n hideChoicesFromInstructions: boolean;\n // Allow multiple answers per marker\n multipleAnswers: boolean;\n // Always false. Not used for this widget\n static: boolean;\n};\n\nexport type PerseusLabelImageMarker = {\n // A list of correct answers for this marker. Often only one but can have multiple\n answers: ReadonlyArray<string>;\n // Translatable Text; The text to show for the marker. Not displayed directly to the user\n label: string;\n // X Coordiate location of the marker on the image\n x: number;\n // Y Coordinate location of the marker on the image\n y: number;\n};\n\nexport type PerseusMatcherWidgetOptions = {\n // Translatable Text; Labels to adorn the headings for the columns. Only 2 values [left, right]. e.g. [\"Concepts\", \"Things\"]\n labels: ReadonlyArray<string>;\n // Translatable Text; Static concepts to show in the left column. e.g. [\"Fruit\", \"Color\", \"Clothes\"]\n left: ReadonlyArray<string>;\n // Translatable Markup; Values that represent the concepts to be correlated with the concepts. e.g. [\"Red\", \"Shirt\", \"Banana\"]\n right: ReadonlyArray<string>;\n // Order of the matched pairs matters. With this option enabled, only the order provided above will be treated as correct. This is useful when ordering is significant, such as in the context of a proof. If disabled, pairwise matching is sufficient. To make this clear, the left column becomes fixed in the provided order and only the cards in the right column can be moved.\n orderMatters: boolean;\n // Adds padding to the rows. Padding is good for text, but not needed for images.\n padding: boolean;\n};\n\nexport type PerseusMatrixWidgetAnswers = ReadonlyArray<ReadonlyArray<number>>;\nexport type PerseusMatrixWidgetOptions = {\n // Translatable Text; Shown before the matrix\n prefix?: string | undefined;\n // Translatable Text; Shown after the matrix\n suffix?: string | undefined;\n // A data matrix representing the \"correct\" answers to be entered into the matrix\n answers: PerseusMatrixWidgetAnswers;\n // The coordinate location of the cursor position at start. default: [0, 0]\n cursorPosition?: ReadonlyArray<number> | undefined;\n // The coordinate size of the matrix. Only supports 2-dimensional matrix. default: [3, 3]\n matrixBoardSize: ReadonlyArray<number>;\n // Whether this is meant to statically display the answers (true) or be used as an input field, graded against the answers\n static?: boolean | undefined;\n};\n\nexport type PerseusMeasurerWidgetOptions = {\n // The image that the user is meant to measure\n image: PerseusImageBackground;\n // Whether to show the Protractor tool overlayed on top of the image\n showProtractor: boolean;\n // Whether to show the Ruler tool overlayed on top of the image\n showRuler: boolean;\n // The unit to show on the ruler. e.g. \"mm\", \"cm\", \"m\", \"km\", \"in\", \"ft\", \"yd\", \"mi\"\n rulerLabel: string;\n // How many ticks to show on the ruler. e.g. 1, 2, 4, 8, 10, 16\n rulerTicks: number;\n // The number of image pixels per unit (label)\n rulerPixels: number;\n // The number of units to display on the ruler\n rulerLength: number;\n // Containing area [width, height]\n box: [number, number];\n // TODO(benchristel): static is not used. Remove it?\n // Always false. Not used for this widget\n static: boolean;\n};\n\nexport type MathFormat =\n | \"integer\"\n | \"mixed\"\n | \"improper\"\n | \"proper\"\n | \"decimal\"\n | \"percent\"\n | \"pi\";\n\nexport type PerseusNumericInputAnswerForm = {\n simplify:\n | \"required\"\n | \"correct\"\n | \"enforced\"\n | \"optional\"\n | null\n | undefined;\n name: MathFormat;\n};\n\nexport type PerseusNumericInputWidgetOptions = {\n // A list of all the possible correct and incorrect answers\n answers: ReadonlyArray<PerseusNumericInputAnswer>;\n // Translatable Text; Text to describe this input. This will be shown to users using screenreaders.\n labelText?: string | undefined;\n // Use size \"Normal\" for all text boxes, unless there are multiple text boxes in one line and the answer area is too narrow to fit them. Options: \"normal\" or \"small\"\n size: string;\n // A coefficient style number allows the student to use - for -1 and an empty string to mean 1.\n coefficient: boolean;\n // Whether to right-align the text or not\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n rightAlign?: boolean;\n // Always false. Not used for this widget\n static: boolean;\n // Used by examples, maybe not used and should be removed in the future\n // see TODO in numeric-input\n answerForms?: ReadonlyArray<PerseusNumericInputAnswerForm>;\n};\n\nexport type PerseusNumericInputAnswer = {\n // Translatable Display; A description for why this answer is correct, wrong, or ungraded\n message: string;\n // The expected answer\n value?: number | null;\n // Whether this answer is \"correct\", \"wrong\", or \"ungraded\"\n status: string;\n // The forms available for this answer. Options: \"integer, \"\"decimal\", \"proper\", \"improper\", \"mixed\", or \"pi\"\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n answerForms?: ReadonlyArray<MathFormat>;\n // Whether we should check the answer strictly against the the configured answerForms (strict = true)\n // or include the set of default answerForms (strict = false).\n strict: boolean;\n // A range of error +/- the value\n // NOTE: perseus_data.go says this is non-nullable even though we handle null values.\n maxError: number | null | undefined;\n // Unsimplified answers are Ungraded, Accepted, or Wrong. Options: \"required\", \"correct\", or \"enforced\"\n simplify: string | null | undefined;\n};\n\nexport type PerseusNumberLineWidgetOptions = {\n // The position of the endpoints of the number line. Setting the range constrains the position of the answer and the labels.\n range: ReadonlyArray<number>;\n // This controls the position of the left / right labels. By default, the labels are set by the range. Note: Ensure that the labels line up with the tick marks, or it may be confusing for users.\n labelRange: ReadonlyArray<number | null>;\n // This controls the styling of the labels for the two main labels as well as all the tick mark labels, if applicable. Options: \"decimal\", \"improper\", \"mixed\", \"non-reduced\"\n labelStyle: string;\n // Show label ticks\n labelTicks: boolean;\n // Show tick controller\n isTickCtrl?: boolean | null | undefined;\n // The range of divisions within the line\n divisionRange: ReadonlyArray<number>;\n // This controls the number (and position) of the tick marks. The number of divisions is constrained to the division range. Note: The user will be able to specify the number of divisions in a number input.\n numDivisions: number | null | undefined;\n // This determines the number of different places the point will snap between two adjacent tick marks. Note: Ensure the required number of snap increments is provided to answer the question.\n snapDivisions: number;\n // This controls the number (and position) of the tick marks; you can either set the number of divisions (2 divisions would split the entire range in two halves), or the tick step (the distance between ticks) and the other value will be updated accordingly. Note: There is no check to see if labels coordinate with the tick marks, which may be confusing for users if the blue labels and black ticks are off-step.\n tickStep: number | null | undefined;\n // The correct relative value. default: \"eq\". options: \"eq\", \"lt\", \"gt\", \"le\", \"ge\"\n correctRel: string | null | undefined;\n // This is the correct answer. The answer is validated (as right or wrong) by using only the end position of the point and the relation (=, &lt;, &gt;, ≤, ≥).\n correctX: number | null;\n // This controls the initial position of the point along the number line\n initialX: number | null | undefined;\n // Show tooltips\n showTooltips?: boolean;\n // When true, the answer is displayed and is immutable\n static: boolean;\n};\n\nexport type PerseusOrdererWidgetOptions = {\n // All of the options available to the user. Place the cards in the correct order. The same card can be used more than once in the answer but will only be displayed once at the top of a stack of identical cards.\n options: ReadonlyArray<PerseusRenderer>;\n // The correct order of the options\n correctOptions: ReadonlyArray<PerseusRenderer>;\n // Cards that are not part of the answer\n otherOptions: ReadonlyArray<PerseusRenderer>;\n // \"normal\" for text options. \"auto\" for image options.\n height: \"normal\" | \"auto\";\n // Use the \"horizontal\" layout for short text and small images. The \"vertical\" layout is best for longer text (e.g. proofs).\n layout: \"horizontal\" | \"vertical\";\n};\n\nexport type PerseusPassageWidgetOptions = {\n // Translatable Text; To add footnotes, add ^ characters where they belong in the passage. Then, add ^ in the footnotes area to reference the footnotes in the passage.\n footnotes: string;\n // Translatable Text; The text of the passage\n passageText: string;\n // translatableText - An optional title that will appear directly above the passage in the same font style. (e.g. Passage 1)\n passageTitle: string;\n // Should we show line numbers along with the passage?\n showLineNumbers: boolean;\n // Always false. Not used for this widget\n static: boolean;\n};\n\nexport type PerseusPassageRefWidgetOptions = {\n // The passage number\n passageNumber: number;\n // The reference number\n referenceNumber: number;\n // Short summary of the referenced section. This will be included in parentheses and quotes automatically.\n summaryText?: string;\n};\n\nexport const plotterPlotTypes = [\n \"bar\",\n \"line\",\n \"pic\",\n \"histogram\",\n \"dotplot\",\n] as const;\nexport type PlotType = (typeof plotterPlotTypes)[number];\n\nexport type PerseusPlotterWidgetOptions = {\n // Translatable Text; The Axis labels. e.g. [\"X Label\", \"Y Label\"]\n labels: ReadonlyArray<string>;\n // Translatable Text; Categories to display along the X access. e.g. [\">0\", \">6\", \">12\", \">18\"]\n categories: ReadonlyArray<string>;\n // The type of the graph. options \"bar\", \"line\", \"pic\", \"histogram\", \"dotplot\"\n type: PlotType;\n // The maximimum Y tick to display in the graph\n maxY: number;\n // The scale of the Y Axis\n scaleY: number;\n // Which ticks to display the labels for. For instance, setting this to \"4\" will only show every 4th label (plus the last one)\n labelInterval: number | null | undefined;\n // Creates the specified number of divisions between the horizontal lines. Fewer snaps between lines makes the graph easier for the student to create correctly.\n snapsPerLine: number;\n // The Y values the graph should start with\n starting: ReadonlyArray<number>;\n // The Y values that represent the correct answer expected\n correct: ReadonlyArray<number>;\n // A picture to represent items in a graph.\n picUrl: string | null | undefined;\n // deprecated\n picSize: number | null | undefined;\n // deprecated\n picBoxHeight: number | null | undefined;\n // deprecated\n plotDimensions: ReadonlyArray<number>;\n};\n\nexport type PerseusRadioWidgetOptions = {\n // The choices provided to the user.\n choices: ReadonlyArray<PerseusRadioChoice>;\n // Does this have a \"none of the above\" option?\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n hasNoneOfTheAbove?: boolean;\n // If multipleSelect is enabled, Specify the number expected to be correct.\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n countChoices?: boolean;\n // Randomize the order of the options or keep them as defined\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n randomize?: boolean;\n // Does this set allow for multiple selections to be correct?\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n multipleSelect?: boolean;\n // deprecated\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n deselectEnabled?: boolean;\n // deprecated\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n onePerLine?: boolean;\n // deprecated\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n displayCount?: any;\n // v0 props\n // `noneOfTheAbove` is still in use (but only set to `false`).\n noneOfTheAbove?: false;\n};\n\nexport type PerseusRadioChoice = {\n // Translatable Markdown; The label for this choice\n content: string;\n // Translatable Markdown; A clue to give the user when they get it wrong\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n clue?: string;\n // Whether this option is a correct answer or not\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n correct?: boolean;\n // If this is none of the above, override the content with \"None of the above\"\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n isNoneOfTheAbove?: boolean;\n // deprecated\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n widgets?: PerseusWidgetsMap;\n};\n\nexport type PerseusSorterWidgetOptions = {\n // Translatable Text; The correct answer (in the correct order). The user will see the cards in a randomized order.\n correct: ReadonlyArray<string>;\n // Adds padding to the options. Padding is good for text but not needed for images\n padding: boolean;\n // Use the \"horizontal\" layout for short text and small images. The \"vertical\" layout is best for longer text and larger images.\n layout: \"horizontal\" | \"vertical\";\n};\n\nexport type PerseusTableWidgetOptions = {\n // Translatable Text; A list of column headers\n headers: ReadonlyArray<string>;\n // The number of rows to display\n rows: number;\n // The number of columns to display\n columns: number;\n // Translatable Text; A 2-dimensional array of text to populate the table with\n answers: ReadonlyArray<ReadonlyArray<string>>;\n};\n\nexport type PerseusInteractionWidgetOptions = {\n // The definition of the graph\n graph: PerseusInteractionGraph;\n // The elements of the graph\n elements: ReadonlyArray<PerseusInteractionElement>;\n // Always false. Not used for this widget\n static: boolean;\n};\n\nexport type PerseusInteractionGraph = {\n // \"canvas\", \"graph\"\n editableSettings?: ReadonlyArray<\"canvas\" | \"graph\">;\n // The Grid Canvas size. e.g. [400, 140]\n box: Size;\n // The Axis labels. e.g. [\"x\", \"y\"]\n labels: ReadonlyArray<string>;\n // The Axis ranges. e.g. [[-10, 10], [-10, 10]]\n range: [Interval, Interval];\n // The steps in the grid. default [1, 1]\n gridStep: [number, number];\n /**\n * The type of markings to display on the graph.\n */\n markings: MarkingsType;\n // The snap steps. default [0.5, 0.5]\n snapStep?: [number, number];\n // Whether the grid is valid or not. Do the numbers all make sense?\n // NOTE(jeremy) The editor for this widget sometimes stores the graph\n // editor validation error message into this field. It seems innocuous\n // because it looks like many of these usages don't actually use the graph\n // at all.\n valid?: boolean | string;\n // An optional background image to use\n backgroundImage?: PerseusImageBackground;\n // Whether to show the Protractor tool overlayed on top of the graph\n showProtractor?: boolean;\n // Whether to show the Ruler tool overlayed on top of the graph\n showRuler?: boolean;\n // The unit to show on the ruler. e.g. \"mm\", \"cm\", \"m\", \"km\", \"in\", \"ft\", \"yd\", \"mi\"\n rulerLabel?: string;\n // How many ticks to show on the ruler. e.g. 1, 2, 4, 8, 10, 16\n rulerTicks?: number;\n // This controls the number (and position) of the tick marks for the X and Y axis. e.g. [1, 1]\n tickStep: [number, number];\n};\n\nexport type PerseusInteractionElement =\n | {\n type: \"function\";\n // An identifier for the element\n key: string;\n options: PerseusInteractionFunctionElementOptions;\n }\n | {\n type: \"label\";\n // An identifier for the element\n key: string;\n options: PerseusInteractionLabelElementOptions;\n }\n | {\n type: \"line\";\n // An identifier for the element\n key: string;\n options: PerseusInteractionLineElementOptions;\n }\n | {\n type: \"movable-line\";\n // An identifier for the element\n key: string;\n options: PerseusInteractionMovableLineElementOptions;\n }\n | {\n type: \"movable-point\";\n // An identifier for the element\n key: string;\n options: PerseusInteractionMovablePointElementOptions;\n }\n | {\n type: \"parametric\";\n // An identifier for the element\n key: string;\n options: PerseusInteractionParametricElementOptions;\n }\n | {\n type: \"point\";\n // An identifier for the element\n key: string;\n options: PerseusInteractionPointElementOptions;\n }\n | {\n type: \"rectangle\";\n // An identifier for the element\n key: string;\n options: PerseusInteractionRectangleElementOptions;\n };\n\nexport type PerseusInteractionFunctionElementOptions = {\n // The definition of the function to draw on the graph. e.g \"x^2 + 1\"\n value: string;\n // The name of the function like f(n). default: \"f\"\n funcName: string;\n // The range of points to start plotting\n rangeMin: string;\n // The range of points to end plotting\n rangeMax: string;\n // The color of the stroke. e.g. #6495ED\n color: string;\n // If the function stroke has a dash, what is it? options: \"\", \"-\", \"- \", \".\", \". \"\n strokeDasharray: string;\n // The thickness of the stroke\n strokeWidth: number;\n};\n\nexport type PerseusInteractionLabelElementOptions = {\n // Translatable Text; the content of the label\n label: string;\n // The color of the label. e.g. \"red\"\n color: string;\n // The X location of the label\n coordX: string;\n // The Y location of the label\n coordY: string;\n};\n\nexport type PerseusInteractionLineElementOptions = {\n // A color code for the line segment. e.g. \"#FFOOAF\"\n color: string;\n // The start of the line segment (X)\n startX: string;\n // The start of the line segment (Y)\n startY: string;\n // The end of the line segment (X)\n endX: string;\n // The end of the line segment (Y)\n endY: string;\n // If the line stroke has a dash, what is it? options: \"\", \"-\", \"- \", \".\", \". \"\n strokeDasharray: string;\n // The thickness of the line\n strokeWidth: number;\n // Does the line have an arrow point to it? options: \"\", \"->\"\n arrows: string;\n};\n\nexport type PerseusInteractionMovableLineElementOptions = {\n // The start of the line segment (X)\n startX: string;\n // The start of the line segment (Y)\n startY: string;\n // Start updates (Xn, Yn) for n\n startSubscript: number;\n // The end of the line segment (X)\n endX: string;\n // The end of the line segment (Y)\n endY: string;\n // End updates (Xm, Ym) for m\n endSubscript: number;\n // How to constrain this line? options \"none\", \"snap\", \"x\", \"y\"\n constraint: string;\n // The snap resolution when constraint is set to \"snap\"\n snap: number;\n // The constraint function for when constraint is set to \"x\" or \"y\"\n constraintFn: string;\n // The lowest possible X value\n constraintXMin: string;\n // The highest possible X value\n constraintXMax: string;\n // The lowest possible Y value\n constraintYMin: string;\n // The highest possible Y value\n constraintYMax: string;\n};\n\nexport type PerseusInteractionMovablePointElementOptions = {\n // The X position of the point\n startX: string;\n // The Y position of the point\n startY: string;\n // Update (Xn, Yn) for n\n varSubscript: number;\n // How to constrain this line? options \"none\", \"snap\", \"x\", \"y\"\n constraint: string;\n // The snap resolution when constraint is set to \"snap\"\n snap: number;\n // The constraint function for when constraint is set to \"x\" or \"y\"\n constraintFn: string;\n // The lowest possible X value\n constraintXMin: string;\n // The highest possible X value\n constraintXMax: string;\n // The lowest possible Y value\n constraintYMin: string;\n // The highest possible Y value\n constraintYMax: string;\n};\n\nexport type PerseusInteractionParametricElementOptions = {\n // The function for the X coordinate. e.g. \"\\\\cos(t)\"\n x: string;\n // The function for the Y coordinate. e.g. \"\\\\sin(t)\"\n y: string;\n // The range of points to start plotting\n rangeMin: string;\n // The range of points to end plotting\n rangeMax: string;\n // The color of the stroke. e.g. #6495ED\n color: string;\n // If the function stroke has a dash, what is it? options: \"\", \"-\", \"- \", \".\", \". \"\n strokeDasharray: string;\n // The thickness of the stroke\n strokeWidth: number;\n};\n\nexport type PerseusInteractionPointElementOptions = {\n // The color of the point. e.g. \"black\"\n color: string;\n // The X coordinate of the point\n coordX: string;\n // The Y coordinate of the point\n coordY: string;\n};\n\nexport type PerseusInteractionRectangleElementOptions = {\n // The fill color. e.g. \"#EDD19B\"\n color: string;\n // The lower left point X\n coordX: string;\n // The lower left point Y\n coordY: string;\n // The width of the rectangle\n width: string;\n // The height of the rectangle\n height: string;\n};\n\nexport type PerseusCSProgramWidgetOptions = {\n // The ID of the CS program to embed\n programID: string;\n // Deprecated. Always null and sometimes omitted entirely.\n programType?: any;\n // Settings that you add here are available to the program as an object returned by Program.settings()\n settings: ReadonlyArray<PerseusCSProgramSetting>;\n // If you show the editor, you should use the \"full-width\" alignment to make room for the width of the editor.\n showEditor: boolean;\n // Whether to show the execute buttons\n showButtons: boolean;\n // The height of the widget\n height: number;\n // TODO(benchristel): static is not used. Delete it?\n // Always false\n static: boolean;\n};\n\nexport type PerseusCSProgramSetting = {\n // The name/key of the setting\n name: string;\n // The value of the setting\n value: string;\n};\n\nexport type PerseusPythonProgramWidgetOptions = {\n // The ID of the Python program to embed\n programID: string;\n // The height of the widget in pixels\n height: number;\n};\n\nexport type PerseusIFrameWidgetOptions = {\n // A URL to display OR a CS Program ID\n url: string;\n // Settings that you add here are available to the program as an object returned by Program.settings()\n settings?: ReadonlyArray<PerseusCSProgramSetting>;\n // The width of the widget\n width: number | string;\n // The height of the widget\n height: number | string;\n // Whether to allow the IFrame to become full-screen (like a video)\n allowFullScreen: boolean;\n // Whether to allow the iframe content to redirect the page\n allowTopNavigation?: boolean;\n // Always false\n static: boolean;\n};\n\nexport type PerseusPhetSimulationWidgetOptions = {\n // A URL to display, must start with https://phet.colorado.edu/\n url: string;\n // Translatable Text; Description of the sim for Khanmigo and alt text\n description: string;\n};\n\nexport type PerseusVideoWidgetOptions = {\n location: string;\n static?: boolean;\n};\n\nexport type PerseusInputNumberWidgetOptions = {\n answerType?:\n | \"number\"\n | \"decimal\"\n | \"integer\"\n | \"rational\"\n | \"improper\"\n | \"mixed\"\n | \"percent\"\n | \"pi\";\n inexact?: boolean;\n maxError?: number | string;\n rightAlign?: boolean;\n simplify: \"required\" | \"optional\" | \"enforced\";\n size: \"normal\" | \"small\";\n value: string | number;\n customKeypad?: boolean;\n};\n\nexport type PerseusMoleculeRendererWidgetOptions = {\n widgetId: string;\n rotationAngle?: number;\n smiles?: string;\n};\n\nexport type PerseusPassageRefTargetWidgetOptions = {\n content: string;\n};\n\nexport type PerseusWidgetOptions =\n | PerseusCategorizerWidgetOptions\n | PerseusCSProgramWidgetOptions\n | PerseusDefinitionWidgetOptions\n | PerseusDropdownWidgetOptions\n | PerseusExplanationWidgetOptions\n | PerseusExpressionWidgetOptions\n | PerseusGradedGroupSetWidgetOptions\n | PerseusGradedGroupWidgetOptions\n | PerseusIFrameWidgetOptions\n | PerseusImageWidgetOptions\n | PerseusInputNumberWidgetOptions\n | PerseusInteractionWidgetOptions\n | PerseusInteractiveGraphWidgetOptions\n | PerseusLabelImageWidgetOptions\n | PerseusMatcherWidgetOptions\n | PerseusMatrixWidgetOptions\n | PerseusMeasurerWidgetOptions\n | PerseusMoleculeRendererWidgetOptions\n | PerseusNumberLineWidgetOptions\n | PerseusNumericInputWidgetOptions\n | PerseusOrdererWidgetOptions\n | PerseusPassageRefTargetWidgetOptions\n | PerseusPassageRefWidgetOptions\n | PerseusPassageWidgetOptions\n | PerseusPhetSimulationWidgetOptions\n | PerseusPlotterWidgetOptions\n | PerseusRadioWidgetOptions\n | PerseusSorterWidgetOptions\n | PerseusTableWidgetOptions\n | PerseusVideoWidgetOptions;\n","import {lockedFigureColorNames} from \"../../data-schema\";\nimport {\n array,\n boolean,\n constant,\n enumeration,\n nullable,\n number,\n object,\n optional,\n pair,\n string,\n trio,\n union,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\nimport {discriminatedUnionOn} from \"../general-purpose-parsers/discriminated-union\";\n\nimport {parsePerseusImageBackground} from \"./perseus-image-background\";\nimport {parseWidget} from \"./widget\";\n\nimport type {\n InteractiveGraphWidget,\n LockedEllipseType,\n LockedFigure,\n LockedFigureColor,\n LockedFigureFillType,\n LockedFunctionType,\n LockedLabelType,\n LockedLineStyle,\n LockedLineType,\n LockedPointType,\n LockedPolygonType,\n LockedVectorType,\n PerseusGraphType,\n PerseusGraphTypeAngle,\n PerseusGraphTypeCircle,\n PerseusGraphTypeLinear,\n PerseusGraphTypeLinearSystem,\n PerseusGraphTypeNone,\n PerseusGraphTypePoint,\n PerseusGraphTypePolygon,\n PerseusGraphTypeQuadratic,\n PerseusGraphTypeRay,\n PerseusGraphTypeSegment,\n PerseusGraphTypeSinusoid,\n} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\n// Used to represent 2-D points and ranges\nconst pairOfNumbers = pair(number, number);\n\nconst parsePerseusGraphTypeAngle: Parser<PerseusGraphTypeAngle> = object({\n type: constant(\"angle\"),\n showAngles: optional(boolean),\n allowReflexAngles: optional(boolean),\n angleOffsetDeg: optional(number),\n snapDegrees: optional(number),\n match: optional(constant(\"congruent\")),\n coords: optional(trio(pairOfNumbers, pairOfNumbers, pairOfNumbers)),\n startCoords: optional(trio(pairOfNumbers, pairOfNumbers, pairOfNumbers)),\n});\n\nconst parsePerseusGraphTypeCircle: Parser<PerseusGraphTypeCircle> = object({\n type: constant(\"circle\"),\n center: optional(pairOfNumbers),\n radius: optional(number),\n startCoords: optional(\n object({\n center: pairOfNumbers,\n radius: number,\n }),\n ),\n // TODO: remove coord? it's legacy.\n coord: optional(pairOfNumbers),\n});\n\nconst parsePerseusGraphTypeLinear: Parser<PerseusGraphTypeLinear> = object({\n type: constant(\"linear\"),\n coords: optional(nullable(pair(pairOfNumbers, pairOfNumbers))),\n startCoords: optional(pair(pairOfNumbers, pairOfNumbers)),\n // TODO: remove coord? it's legacy.\n coord: optional(pairOfNumbers),\n});\n\nconst parsePerseusGraphTypeLinearSystem: Parser<PerseusGraphTypeLinearSystem> =\n object({\n type: constant(\"linear-system\"),\n // TODO(benchristel): default coords to empty array?\n coords: optional(nullable(array(pair(pairOfNumbers, pairOfNumbers)))),\n startCoords: optional(array(pair(pairOfNumbers, pairOfNumbers))),\n // TODO: remove coord? it's legacy.\n coord: optional(pairOfNumbers),\n });\n\nconst parsePerseusGraphTypeNone: Parser<PerseusGraphTypeNone> = object({\n type: constant(\"none\"),\n});\n\nconst parsePerseusGraphTypePoint: Parser<PerseusGraphTypePoint> = object({\n type: constant(\"point\"),\n numPoints: optional(union(number).or(constant(\"unlimited\")).parser),\n coords: optional(nullable(array(pairOfNumbers))),\n startCoords: optional(array(pairOfNumbers)),\n // TODO: remove coord? it's legacy.\n coord: optional(pairOfNumbers),\n});\n\nconst parsePerseusGraphTypePolygon: Parser<PerseusGraphTypePolygon> = object({\n type: constant(\"polygon\"),\n numSides: optional(union(number).or(constant(\"unlimited\")).parser),\n showAngles: optional(boolean),\n showSides: optional(boolean),\n snapTo: optional(enumeration(\"grid\", \"angles\", \"sides\")),\n match: optional(enumeration(\"similar\", \"congruent\", \"approx\", \"exact\")),\n startCoords: optional(array(pairOfNumbers)),\n // TODO: remove coord? it's legacy.\n coord: optional(pairOfNumbers),\n});\n\nconst parsePerseusGraphTypeQuadratic: Parser<PerseusGraphTypeQuadratic> =\n object({\n type: constant(\"quadratic\"),\n coords: optional(\n nullable(trio(pairOfNumbers, pairOfNumbers, pairOfNumbers)),\n ),\n startCoords: optional(\n trio(pairOfNumbers, pairOfNumbers, pairOfNumbers),\n ),\n // TODO: remove coord? it's legacy.\n coord: optional(pairOfNumbers),\n });\n\nconst parsePerseusGraphTypeRay: Parser<PerseusGraphTypeRay> = object({\n type: constant(\"ray\"),\n coords: optional(nullable(pair(pairOfNumbers, pairOfNumbers))),\n startCoords: optional(pair(pairOfNumbers, pairOfNumbers)),\n // TODO: remove coord? it's legacy.\n coord: optional(pairOfNumbers),\n});\n\nconst parsePerseusGraphTypeSegment: Parser<PerseusGraphTypeSegment> = object({\n type: constant(\"segment\"),\n // TODO(benchristel): default numSegments?\n numSegments: optional(number),\n coords: optional(nullable(array(pair(pairOfNumbers, pairOfNumbers)))),\n startCoords: optional(array(pair(pairOfNumbers, pairOfNumbers))),\n // TODO: remove coord? it's legacy.\n coord: optional(pairOfNumbers),\n});\n\nconst parsePerseusGraphTypeSinusoid: Parser<PerseusGraphTypeSinusoid> = object({\n type: constant(\"sinusoid\"),\n coords: optional(nullable(array(pairOfNumbers))),\n startCoords: optional(array(pairOfNumbers)),\n // TODO: remove coord? it's legacy.\n coord: optional(pairOfNumbers),\n});\n\nconst parsePerseusGraphType: Parser<PerseusGraphType> = discriminatedUnionOn(\n \"type\",\n)\n .withBranch(\"angle\", parsePerseusGraphTypeAngle)\n .withBranch(\"circle\", parsePerseusGraphTypeCircle)\n .withBranch(\"linear\", parsePerseusGraphTypeLinear)\n .withBranch(\"linear-system\", parsePerseusGraphTypeLinearSystem)\n .withBranch(\"none\", parsePerseusGraphTypeNone)\n .withBranch(\"point\", parsePerseusGraphTypePoint)\n .withBranch(\"polygon\", parsePerseusGraphTypePolygon)\n .withBranch(\"quadratic\", parsePerseusGraphTypeQuadratic)\n .withBranch(\"ray\", parsePerseusGraphTypeRay)\n .withBranch(\"segment\", parsePerseusGraphTypeSegment)\n .withBranch(\"sinusoid\", parsePerseusGraphTypeSinusoid).parser;\n\nconst parseLockedFigureColor: Parser<LockedFigureColor> = enumeration(\n ...lockedFigureColorNames,\n);\n\nconst parseLockedFigureFillType: Parser<LockedFigureFillType> = enumeration(\n \"none\",\n \"white\",\n \"translucent\",\n \"solid\",\n);\n\nconst parseLockedLineStyle: Parser<LockedLineStyle> = enumeration(\n \"solid\",\n \"dashed\",\n);\n\nconst parseLockedLabelType: Parser<LockedLabelType> = object({\n type: constant(\"label\"),\n coord: pairOfNumbers,\n text: string,\n color: parseLockedFigureColor,\n size: enumeration(\"small\", \"medium\", \"large\"),\n});\n\nconst parseLockedPointType: Parser<LockedPointType> = object({\n type: constant(\"point\"),\n coord: pairOfNumbers,\n color: parseLockedFigureColor,\n filled: boolean,\n // TODO(benchristel): default labels to empty array?\n labels: optional(array(parseLockedLabelType)),\n ariaLabel: optional(string),\n});\n\nconst parseLockedLineType: Parser<LockedLineType> = object({\n type: constant(\"line\"),\n kind: enumeration(\"line\", \"ray\", \"segment\"),\n points: pair(parseLockedPointType, parseLockedPointType),\n color: parseLockedFigureColor,\n lineStyle: parseLockedLineStyle,\n showPoint1: defaulted(boolean, () => false),\n showPoint2: defaulted(boolean, () => false),\n // TODO(benchristel): default labels to empty array?\n labels: optional(array(parseLockedLabelType)),\n ariaLabel: optional(string),\n});\n\nconst parseLockedVectorType: Parser<LockedVectorType> = object({\n type: constant(\"vector\"),\n points: pair(pairOfNumbers, pairOfNumbers),\n color: parseLockedFigureColor,\n // TODO(benchristel): default labels to empty array?\n labels: optional(array(parseLockedLabelType)),\n ariaLabel: optional(string),\n});\n\nconst parseLockedEllipseType: Parser<LockedEllipseType> = object({\n type: constant(\"ellipse\"),\n center: pairOfNumbers,\n radius: pairOfNumbers,\n angle: number,\n color: parseLockedFigureColor,\n fillStyle: parseLockedFigureFillType,\n strokeStyle: parseLockedLineStyle,\n // TODO(benchristel): default labels to empty array?\n labels: optional(array(parseLockedLabelType)),\n ariaLabel: optional(string),\n});\n\nconst parseLockedPolygonType: Parser<LockedPolygonType> = object({\n type: constant(\"polygon\"),\n points: array(pairOfNumbers),\n color: parseLockedFigureColor,\n showVertices: boolean,\n fillStyle: parseLockedFigureFillType,\n strokeStyle: parseLockedLineStyle,\n // TODO(benchristel): default labels to empty array?\n labels: optional(array(parseLockedLabelType)),\n ariaLabel: optional(string),\n});\n\nconst parseLockedFunctionType: Parser<LockedFunctionType> = object({\n type: constant(\"function\"),\n color: parseLockedFigureColor,\n strokeStyle: parseLockedLineStyle,\n equation: string,\n directionalAxis: enumeration(\"x\", \"y\"),\n domain: optional(pairOfNumbers),\n // TODO(benchristel): default labels to empty array?\n labels: optional(array(parseLockedLabelType)),\n ariaLabel: optional(string),\n});\n\nconst parseLockedFigure: Parser<LockedFigure> = discriminatedUnionOn(\"type\")\n .withBranch(\"point\", parseLockedPointType)\n .withBranch(\"line\", parseLockedLineType)\n .withBranch(\"vector\", parseLockedVectorType)\n .withBranch(\"ellipse\", parseLockedEllipseType)\n .withBranch(\"polygon\", parseLockedPolygonType)\n .withBranch(\"function\", parseLockedFunctionType)\n .withBranch(\"label\", parseLockedLabelType).parser;\n\nexport const parseInteractiveGraphWidget: Parser<InteractiveGraphWidget> =\n parseWidget(\n constant(\"interactive-graph\"),\n object({\n step: pairOfNumbers,\n // TODO(benchristel): rather than making gridStep and snapStep\n // optional, we should duplicate the defaulting logic from the\n // InteractiveGraph component. See parse-perseus-json/README.md for\n // why.\n gridStep: optional(pairOfNumbers),\n snapStep: optional(pairOfNumbers),\n backgroundImage: optional(parsePerseusImageBackground),\n markings: enumeration(\"graph\", \"grid\", \"none\"),\n labels: optional(array(string)),\n showProtractor: boolean,\n showRuler: optional(boolean),\n showTooltips: optional(boolean),\n rulerLabel: optional(string),\n rulerTicks: optional(number),\n range: pair(pairOfNumbers, pairOfNumbers),\n // NOTE(benchristel): I copied the default graph from\n // interactive-graph.tsx. See the parse-perseus-json/README.md for\n // an explanation of why we want to duplicate the default here.\n graph: defaulted(parsePerseusGraphType, () => ({\n type: \"linear\" as const,\n })),\n correct: parsePerseusGraphType,\n // TODO(benchristel): default lockedFigures to empty array\n lockedFigures: optional(array(parseLockedFigure)),\n fullGraphLabel: optional(string),\n fullGraphAriaDescription: optional(string),\n }),\n );\n","import {\n array,\n boolean,\n constant,\n number,\n object,\n string,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {LabelImageWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parseLabelImageWidget: Parser<LabelImageWidget> = parseWidget(\n constant(\"label-image\"),\n object({\n choices: array(string),\n imageUrl: string,\n imageAlt: string,\n imageHeight: number,\n imageWidth: number,\n markers: array(\n object({\n answers: array(string),\n label: string,\n x: number,\n y: number,\n }),\n ),\n hideChoicesFromInstructions: boolean,\n multipleAnswers: boolean,\n static: defaulted(boolean, () => false),\n }),\n);\n","import {\n array,\n boolean,\n constant,\n object,\n string,\n} from \"../general-purpose-parsers\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {MatcherWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parseMatcherWidget: Parser<MatcherWidget> = parseWidget(\n constant(\"matcher\"),\n object({\n labels: array(string),\n left: array(string),\n right: array(string),\n orderMatters: boolean,\n padding: boolean,\n }),\n);\n","import {\n array,\n boolean,\n constant,\n number,\n object,\n optional,\n pipeParsers,\n string,\n union,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\nimport {stringToNumber} from \"../general-purpose-parsers/string-to-number\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {MatrixWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nconst numberOrString = union(number).or(string).parser;\nconst numeric = pipeParsers(defaulted(numberOrString, () => NaN)).then(\n stringToNumber,\n).parser;\n\nexport const parseMatrixWidget: Parser<MatrixWidget> = parseWidget(\n defaulted(constant(\"matrix\"), () => \"matrix\"),\n object({\n prefix: optional(string),\n suffix: optional(string),\n answers: array(array(numeric)),\n cursorPosition: optional(array(number)),\n matrixBoardSize: array(number),\n static: optional(boolean),\n }),\n);\n","import {\n boolean,\n constant,\n number,\n object,\n pair,\n string,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parsePerseusImageBackground} from \"./perseus-image-background\";\nimport {parseWidget} from \"./widget\";\n\nimport type {MeasurerWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parseMeasurerWidget: Parser<MeasurerWidget> = parseWidget(\n constant(\"measurer\"),\n object({\n // The default value for image comes from measurer.tsx.\n // See parse-perseus-json/README.md for why we want to duplicate the\n // defaults here.\n image: defaulted(parsePerseusImageBackground, () => ({\n url: null,\n top: 0,\n left: 0,\n })),\n showProtractor: boolean,\n showRuler: boolean,\n rulerLabel: string,\n rulerTicks: number,\n rulerPixels: number,\n rulerLength: number,\n box: pair(number, number),\n // TODO(benchristel): static is not used. Remove it?\n static: defaulted(boolean, () => false),\n }),\n);\n","import {\n constant,\n object,\n string,\n number,\n optional,\n} from \"../general-purpose-parsers\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {MoleculeRendererWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parseMoleculeRendererWidget: Parser<MoleculeRendererWidget> =\n parseWidget(\n constant(\"molecule-renderer\"),\n object({\n widgetId: string,\n rotationAngle: optional(number),\n smiles: optional(string),\n }),\n );\n","import {\n constant,\n object,\n array,\n number,\n string,\n boolean,\n optional,\n nullable,\n pipeParsers,\n union,\n} from \"../general-purpose-parsers\";\nimport {convert} from \"../general-purpose-parsers/convert\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {NumberLineWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nconst emptyStringToNull = pipeParsers(constant(\"\")).then(\n convert(() => null),\n).parser;\n\nexport const parseNumberLineWidget: Parser<NumberLineWidget> = parseWidget(\n constant(\"number-line\"),\n object({\n range: array(number),\n labelRange: array(nullable(union(number).or(emptyStringToNull).parser)),\n labelStyle: string,\n labelTicks: boolean,\n isTickCtrl: optional(nullable(boolean)),\n divisionRange: array(number),\n numDivisions: optional(nullable(number)),\n // NOTE(benchristel): I copied the default snapDivisions from\n // number-line.tsx. See the parse-perseus-json/README.md for\n // an explanation of why we want to duplicate the default here.\n snapDivisions: defaulted(number, () => 2),\n tickStep: optional(nullable(number)),\n correctRel: optional(nullable(string)),\n correctX: nullable(number),\n initialX: optional(nullable(number)),\n showTooltips: optional(boolean),\n static: defaulted(boolean, () => false),\n }),\n);\n","import {\n constant,\n object,\n array,\n string,\n number,\n optional,\n enumeration,\n boolean,\n nullable,\n union,\n pipeParsers,\n} from \"../general-purpose-parsers\";\nimport {convert} from \"../general-purpose-parsers/convert\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {NumericInputWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nconst parseMathFormat = enumeration(\n \"integer\",\n \"mixed\",\n \"improper\",\n \"proper\",\n \"decimal\",\n \"percent\",\n \"pi\",\n);\n\nexport const parseNumericInputWidget: Parser<NumericInputWidget> = parseWidget(\n constant(\"numeric-input\"),\n object({\n answers: array(\n object({\n message: string,\n // TODO(benchristel): value should never be null or undefined,\n // but we have some content where it is anyway. If we backfill\n // the data, simplify this.\n value: optional(nullable(number)),\n status: string,\n answerForms: defaulted(array(parseMathFormat), () => undefined),\n strict: boolean,\n maxError: optional(nullable(number)),\n // TODO(benchristel): simplify should never be a boolean, but we\n // have some content where it is anyway. If we ever backfill\n // the data, we should simplify `simplify`.\n simplify: optional(\n nullable(\n union(string).or(\n pipeParsers(boolean).then(convert(String)).parser,\n ).parser,\n ),\n ),\n }),\n ),\n labelText: optional(string),\n size: string,\n coefficient: defaulted(boolean, () => false),\n rightAlign: optional(boolean),\n static: defaulted(boolean, () => false),\n answerForms: optional(\n array(\n object({\n name: parseMathFormat,\n simplify: optional(\n nullable(\n enumeration(\n \"required\",\n \"correct\",\n \"enforced\",\n \"optional\",\n ),\n ),\n ),\n }),\n ),\n ),\n }),\n);\n","import {\n array,\n constant,\n enumeration,\n object,\n pipeParsers,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parsePerseusRenderer} from \"./perseus-renderer\";\nimport {parseWidget} from \"./widget\";\n\nimport type {OrdererWidget} from \"../../data-schema\";\nimport type {Parser, PartialParser} from \"../parser-types\";\n\n// There is an import cycle between orderer-widget.ts and perseus-renderer.ts.\n// This wrapper ensures that we don't refer to parsePerseusRenderer before\n// it's defined.\nfunction parseRenderer(rawValue, ctx) {\n return parsePerseusRenderer(rawValue, ctx);\n}\n\nconst largeToAuto: PartialParser<\n \"normal\" | \"auto\" | \"large\",\n \"normal\" | \"auto\"\n> = (height, ctx) => {\n if (height === \"large\") {\n return ctx.success(\"auto\");\n }\n return ctx.success(height);\n};\n\nexport const parseOrdererWidget: Parser<OrdererWidget> = parseWidget(\n constant(\"orderer\"),\n object({\n options: defaulted(array(parseRenderer), () => []),\n correctOptions: array(parseRenderer),\n otherOptions: array(parseRenderer),\n height: pipeParsers(enumeration(\"normal\", \"auto\", \"large\")).then(\n largeToAuto,\n ).parser,\n layout: defaulted(\n enumeration(\"horizontal\", \"vertical\"),\n () => \"horizontal\" as const,\n ),\n }),\n);\n","import {\n constant,\n object,\n string,\n number,\n optional,\n} from \"../general-purpose-parsers\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {PassageRefWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parsePassageRefWidget: Parser<PassageRefWidget> = parseWidget(\n constant(\"passage-ref\"),\n object({\n passageNumber: number,\n referenceNumber: number,\n summaryText: optional(string),\n }),\n);\n","import {constant, object, string, boolean} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {PassageWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parsePassageWidget: Parser<PassageWidget> = parseWidget(\n constant(\"passage\"),\n object({\n footnotes: defaulted(string, () => \"\"),\n passageText: string,\n passageTitle: defaulted(string, () => \"\"),\n showLineNumbers: boolean,\n static: defaulted(boolean, () => false),\n }),\n);\n","import {constant, object, string} from \"../general-purpose-parsers\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {PhetSimulationWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parsePhetSimulationWidget: Parser<PhetSimulationWidget> =\n parseWidget(\n constant(\"phet-simulation\"),\n object({\n url: string,\n description: string,\n }),\n );\n","import {plotterPlotTypes} from \"../../data-schema\";\nimport {\n constant,\n object,\n string,\n array,\n number,\n optional,\n nullable,\n enumeration,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {PlotterWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parsePlotterWidget: Parser<PlotterWidget> = parseWidget(\n constant(\"plotter\"),\n object({\n labels: array(string),\n categories: array(string),\n type: enumeration(...plotterPlotTypes),\n maxY: number,\n // The default value for scaleY comes from plotter.tsx.\n // See parse-perseus-json/README.md for why we want to duplicate the\n // defaults here.\n scaleY: defaulted(number, () => 1),\n labelInterval: optional(nullable(number)),\n // The default value for snapsPerLine comes from plotter.tsx.\n // See parse-perseus-json/README.md for why we want to duplicate the\n // defaults here.\n snapsPerLine: defaulted(number, () => 2),\n starting: array(number),\n correct: array(number),\n picUrl: optional(nullable(string)),\n picSize: optional(nullable(number)),\n picBoxHeight: optional(nullable(number)),\n // NOTE(benchristel): I copied the default plotDimensions from\n // plotter.tsx. See the parse-perseus-json/README.md for an explanation\n // of why we want to duplicate the defaults here.\n plotDimensions: defaulted(array(number), () => [380, 300]),\n }),\n);\n","import {constant, object, string, number} from \"../general-purpose-parsers\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {PythonProgramWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parsePythonProgramWidget: Parser<PythonProgramWidget> =\n parseWidget(\n constant(\"python-program\"),\n object({\n programID: string,\n height: number,\n }),\n );\n","import {\n any,\n array,\n boolean,\n constant,\n object,\n optional,\n string,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\nimport {parseWidgetsMap} from \"./widgets-map\";\n\nimport type {RadioWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parseRadioWidget: Parser<RadioWidget> = parseWidget(\n constant(\"radio\"),\n object({\n choices: array(\n object({\n content: defaulted(string, () => \"\"),\n clue: optional(string),\n correct: optional(boolean),\n isNoneOfTheAbove: optional(boolean),\n // deprecated\n // There is an import cycle between radio-widget.ts and\n // widgets-map.ts. The anonymous function below ensures that we\n // don't refer to parseWidgetsMap before it's defined.\n widgets: defaulted(\n (rawVal, ctx) => parseWidgetsMap(rawVal, ctx),\n () => undefined,\n ),\n }),\n ),\n hasNoneOfTheAbove: optional(boolean),\n countChoices: optional(boolean),\n randomize: optional(boolean),\n multipleSelect: optional(boolean),\n deselectEnabled: optional(boolean),\n // deprecated\n onePerLine: optional(boolean),\n // deprecated\n displayCount: optional(any),\n // v0 props\n // `noneOfTheAbove` is still in use (but only set to `false`).\n noneOfTheAbove: optional(constant(false)),\n }),\n);\n","import {\n array,\n boolean,\n constant,\n enumeration,\n object,\n string,\n} from \"../general-purpose-parsers\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {SorterWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parseSorterWidget: Parser<SorterWidget> = parseWidget(\n constant(\"sorter\"),\n object({\n correct: array(string),\n padding: boolean,\n layout: enumeration(\"horizontal\", \"vertical\"),\n }),\n);\n","import {\n array,\n number,\n constant,\n object,\n string,\n} from \"../general-purpose-parsers\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {TableWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parseTableWidget: Parser<TableWidget> = parseWidget(\n constant(\"table\"),\n object({\n headers: array(string),\n rows: number,\n columns: number,\n answers: array(array(string)),\n }),\n);\n","import {\n constant,\n object,\n string,\n boolean,\n optional,\n} from \"../general-purpose-parsers\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {VideoWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parseVideoWidget: Parser<VideoWidget> = parseWidget(\n constant(\"video\"),\n object({\n location: string,\n static: optional(boolean),\n }),\n);\n","import {\n any,\n pair,\n isObject,\n string,\n object,\n constant,\n} from \"../general-purpose-parsers\";\nimport {isFailure} from \"../result\";\n\nimport {parseCategorizerWidget} from \"./categorizer-widget\";\nimport {parseCSProgramWidget} from \"./cs-program-widget\";\nimport {parseDefinitionWidget} from \"./definition-widget\";\nimport {parseDropdownWidget} from \"./dropdown-widget\";\nimport {parseExplanationWidget} from \"./explanation-widget\";\nimport {parseExpressionWidget} from \"./expression-widget\";\nimport {parseGradedGroupSetWidget} from \"./graded-group-set-widget\";\nimport {parseGradedGroupWidget} from \"./graded-group-widget\";\nimport {parseGrapherWidget} from \"./grapher-widget\";\nimport {parseGroupWidget} from \"./group-widget\";\nimport {parseIframeWidget} from \"./iframe-widget\";\nimport {parseImageWidget} from \"./image-widget\";\nimport {parseInputNumberWidget} from \"./input-number-widget\";\nimport {parseInteractionWidget} from \"./interaction-widget\";\nimport {parseInteractiveGraphWidget} from \"./interactive-graph-widget\";\nimport {parseLabelImageWidget} from \"./label-image-widget\";\nimport {parseMatcherWidget} from \"./matcher-widget\";\nimport {parseMatrixWidget} from \"./matrix-widget\";\nimport {parseMeasurerWidget} from \"./measurer-widget\";\nimport {parseMoleculeRendererWidget} from \"./molecule-renderer-widget\";\nimport {parseNumberLineWidget} from \"./number-line-widget\";\nimport {parseNumericInputWidget} from \"./numeric-input-widget\";\nimport {parseOrdererWidget} from \"./orderer-widget\";\nimport {parsePassageRefWidget} from \"./passage-ref-widget\";\nimport {parsePassageWidget} from \"./passage-widget\";\nimport {parsePhetSimulationWidget} from \"./phet-simulation-widget\";\nimport {parsePlotterWidget} from \"./plotter-widget\";\nimport {parsePythonProgramWidget} from \"./python-program-widget\";\nimport {parseRadioWidget} from \"./radio-widget\";\nimport {parseSorterWidget} from \"./sorter-widget\";\nimport {parseTableWidget} from \"./table-widget\";\nimport {parseVideoWidget} from \"./video-widget\";\nimport {parseWidget} from \"./widget\";\n\nimport type {\n DeprecatedStandinWidget,\n PerseusWidgetsMap,\n} from \"../../data-schema\";\nimport type {ParseContext, Parser, ParseResult} from \"../parser-types\";\n\nexport const parseWidgetsMap: Parser<PerseusWidgetsMap> = (rawValue, ctx) => {\n if (!isObject(rawValue)) {\n return ctx.failure(\"PerseusWidgetsMap\", rawValue);\n }\n\n const widgetsMap: PerseusWidgetsMap = {};\n for (const key of Object.keys(rawValue)) {\n // parseWidgetsMapEntry modifies the widgetsMap. This is kind of gross,\n // but it's the only way I could find to make TypeScript check the key\n // against the widget type.\n const entryResult = parseWidgetsMapEntry(\n [key, rawValue[key]],\n widgetsMap,\n ctx.forSubtree(key),\n );\n if (isFailure(entryResult)) {\n return entryResult;\n }\n }\n\n return ctx.success(widgetsMap);\n};\n\nconst parseWidgetsMapEntry: (\n entry: [string, unknown],\n widgetMap: PerseusWidgetsMap,\n ctx: ParseContext,\n) => ParseResult<unknown> = ([id, widget], widgetMap, ctx) => {\n const idComponentsResult = parseWidgetIdComponents(\n id.split(\" \"),\n ctx.forSubtree(\"(widget ID)\"),\n );\n if (isFailure(idComponentsResult)) {\n return idComponentsResult;\n }\n const [type, n] = idComponentsResult.value;\n\n function parseAndAssign<K extends keyof PerseusWidgetsMap>(\n key: K,\n parse: Parser<PerseusWidgetsMap[K]>,\n ): ParseResult<unknown> {\n const widgetResult = parse(widget, ctx);\n if (isFailure(widgetResult)) {\n return widgetResult;\n }\n widgetMap[key] = widgetResult.value;\n return ctx.success(undefined);\n }\n\n switch (type) {\n case \"categorizer\":\n return parseAndAssign(`categorizer ${n}`, parseCategorizerWidget);\n case \"cs-program\":\n return parseAndAssign(`cs-program ${n}`, parseCSProgramWidget);\n case \"definition\":\n return parseAndAssign(`definition ${n}`, parseDefinitionWidget);\n case \"dropdown\":\n return parseAndAssign(`dropdown ${n}`, parseDropdownWidget);\n case \"explanation\":\n return parseAndAssign(`explanation ${n}`, parseExplanationWidget);\n case \"expression\":\n return parseAndAssign(`expression ${n}`, parseExpressionWidget);\n case \"grapher\":\n return parseAndAssign(`grapher ${n}`, parseGrapherWidget);\n case \"group\":\n return parseAndAssign(`group ${n}`, parseGroupWidget);\n case \"graded-group\":\n return parseAndAssign(`graded-group ${n}`, parseGradedGroupWidget);\n case \"graded-group-set\":\n return parseAndAssign(\n `graded-group-set ${n}`,\n parseGradedGroupSetWidget,\n );\n case \"iframe\":\n return parseAndAssign(`iframe ${n}`, parseIframeWidget);\n case \"image\":\n return parseAndAssign(`image ${n}`, parseImageWidget);\n case \"input-number\":\n return parseAndAssign(`input-number ${n}`, parseInputNumberWidget);\n case \"interaction\":\n return parseAndAssign(`interaction ${n}`, parseInteractionWidget);\n case \"interactive-graph\":\n return parseAndAssign(\n `interactive-graph ${n}`,\n parseInteractiveGraphWidget,\n );\n case \"label-image\":\n return parseAndAssign(`label-image ${n}`, parseLabelImageWidget);\n case \"matcher\":\n return parseAndAssign(`matcher ${n}`, parseMatcherWidget);\n case \"matrix\":\n return parseAndAssign(`matrix ${n}`, parseMatrixWidget);\n case \"measurer\":\n return parseAndAssign(`measurer ${n}`, parseMeasurerWidget);\n case \"molecule-renderer\":\n return parseAndAssign(\n `molecule-renderer ${n}`,\n parseMoleculeRendererWidget,\n );\n case \"number-line\":\n return parseAndAssign(`number-line ${n}`, parseNumberLineWidget);\n case \"numeric-input\":\n return parseAndAssign(\n `numeric-input ${n}`,\n parseNumericInputWidget,\n );\n case \"orderer\":\n return parseAndAssign(`orderer ${n}`, parseOrdererWidget);\n case \"passage\":\n return parseAndAssign(`passage ${n}`, parsePassageWidget);\n case \"passage-ref\":\n return parseAndAssign(`passage-ref ${n}`, parsePassageRefWidget);\n case \"passage-ref-target\":\n // NOTE(benchristel): as of 2024-11-12, passage-ref-target is only\n // used in test content. See:\n // https://www.khanacademy.org/devadmin/content/search?query=widget:passage-ref-target\n return parseAndAssign(`passage-ref-target ${n}`, any);\n case \"phet-simulation\":\n return parseAndAssign(\n `phet-simulation ${n}`,\n parsePhetSimulationWidget,\n );\n case \"plotter\":\n return parseAndAssign(`plotter ${n}`, parsePlotterWidget);\n case \"python-program\":\n return parseAndAssign(\n `python-program ${n}`,\n parsePythonProgramWidget,\n );\n case \"radio\":\n return parseAndAssign(`radio ${n}`, parseRadioWidget);\n case \"sorter\":\n return parseAndAssign(`sorter ${n}`, parseSorterWidget);\n case \"table\":\n return parseAndAssign(`table ${n}`, parseTableWidget);\n case \"video\":\n return parseAndAssign(`video ${n}`, parseVideoWidget);\n case \"sequence\":\n // sequence is a deprecated widget type, and the corresponding\n // widget component no longer exists.\n return parseAndAssign(`sequence ${n}`, parseDeprecatedWidget);\n case \"lights-puzzle\":\n return parseAndAssign(`lights-puzzle ${n}`, parseDeprecatedWidget);\n case \"simulator\":\n return parseAndAssign(`simulator ${n}`, parseDeprecatedWidget);\n case \"transformer\":\n return parseAndAssign(`transformer ${n}`, parseDeprecatedWidget);\n\n default:\n return parseAndAssign(\n `${type} ${n}` as any,\n parseWidget(constant(type), any) as any,\n );\n }\n};\n\nconst parseDeprecatedWidget: Parser<DeprecatedStandinWidget> = parseWidget(\n // Ignore the incoming widget type and hardcode \"deprecated-standin\"\n (_, ctx) => ctx.success(\"deprecated-standin\" as const),\n // Allow any widget options\n object({}),\n);\n\nconst parseStringToNonNegativeInt: Parser<number> = (rawValue, ctx) => {\n // The article renderer seems to allow the numeric part of a widget ID to\n // be 0, at least for image widgets. However, if widget IDs in an exercise\n // contain 0, the exercise renderer will blow up. We allow 0 here for\n // compatibility with articles.\n if (typeof rawValue !== \"string\" || !/^(0|[1-9][0-9]*)$/.test(rawValue)) {\n return ctx.failure(\n \"a string representing a non-negative integer\",\n rawValue,\n );\n }\n return ctx.success(+rawValue);\n};\n\nconst parseWidgetIdComponents = pair(string, parseStringToNonNegativeInt);\n","import {any, object, string} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseImages} from \"./images-map\";\nimport {parseWidgetsMap} from \"./widgets-map\";\n\nimport type {PerseusRenderer} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parsePerseusRenderer: Parser<PerseusRenderer> = defaulted(\n object({\n // TODO(benchristel): content is also defaulted to empty string in\n // renderer.tsx. See if we can remove one default or the other.\n content: defaulted(string, () => \"\"),\n // This module has an import cycle with parseWidgetsMap, because the\n // `group` widget can contain another renderer.\n // The anonymous function below ensures that we don't try to access\n // parseWidgetsMap before it's defined.\n widgets: defaulted(\n (rawVal, ctx) => parseWidgetsMap(rawVal, ctx),\n () => ({}),\n ),\n images: parseImages,\n // deprecated\n metadata: any,\n }),\n // Default value\n () => ({\n content: \"\",\n widgets: {},\n images: {},\n }),\n);\n","import {array, union} from \"../general-purpose-parsers\";\n\nimport {parsePerseusRenderer} from \"./perseus-renderer\";\n\nimport type {PerseusArticle} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parsePerseusArticle: Parser<PerseusArticle> = union(\n parsePerseusRenderer,\n).or(array(parsePerseusRenderer)).parser;\n","import {\n any,\n boolean,\n object,\n optional,\n string,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseImages} from \"./images-map\";\nimport {parseWidgetsMap} from \"./widgets-map\";\n\nimport type {Hint} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parseHint: Parser<Hint> = object({\n replace: optional(boolean),\n content: string,\n widgets: defaulted(parseWidgetsMap, () => ({})),\n images: parseImages,\n // deprecated\n metadata: any,\n});\n","import {object, pipeParsers} from \"../general-purpose-parsers\";\nimport {convert} from \"../general-purpose-parsers/convert\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport type {PerseusAnswerArea} from \"@khanacademy/perseus-core\";\n\nexport const parsePerseusAnswerArea = pipeParsers(\n defaulted(object({}), () => ({})),\n).then(convert(toAnswerArea)).parser;\n\n// Some answerAreas have extra, bogus fields, like:\n//\n// \"answerArea\": {\n// \"type\": \"multiple\",\n// \"options\": {},\n// \"version\": null,\n// \"static\": false,\n// \"graded\": false,\n// \"alignment\": \"\",\n// }\n//\n// This function filters the fields of an answerArea object, keeping only the\n// known ones, and converts `undefined` and `null` values to `false`.\nfunction toAnswerArea(raw: Record<string, unknown>): PerseusAnswerArea {\n return {\n zTable: !!raw.zTable,\n calculator: !!raw.calculator,\n chi2Table: !!raw.chi2Table,\n financialCalculatorMonthlyPayment:\n !!raw.financialCalculatorMonthlyPayment,\n financialCalculatorTotalAmount: !!raw.financialCalculatorTotalAmount,\n financialCalculatorTimeToPayOff: !!raw.financialCalculatorTimeToPayOff,\n periodicTable: !!raw.periodicTable,\n periodicTableWithKey: !!raw.periodicTableWithKey,\n tTable: !!raw.tTable,\n };\n}\n","import {any, array, number, object, optional} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseHint} from \"./hint\";\nimport {parsePerseusAnswerArea} from \"./perseus-answer-area\";\nimport {parsePerseusRenderer} from \"./perseus-renderer\";\n\nimport type {PerseusItem} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parsePerseusItem: Parser<PerseusItem> = object({\n question: parsePerseusRenderer,\n hints: defaulted(array(parseHint), () => []),\n answerArea: parsePerseusAnswerArea,\n itemDataVersion: optional(\n object({\n major: number,\n minor: number,\n }),\n ),\n // Deprecated field\n answer: any,\n});\n","import {isRealJSONParse} from \"../utils/is-real-json-parse\";\n\nimport {parse} from \"./parse\";\nimport {parsePerseusArticle as migrateAndTypecheckPerseusArticle} from \"./perseus-parsers/perseus-article\";\nimport {parsePerseusItem as migrateAndTypecheckPerseusItem} from \"./perseus-parsers/perseus-item\";\nimport {failure, isFailure} from \"./result\";\n\nimport type {Result} from \"./result\";\nimport type {PerseusItem, PerseusArticle} from \"../data-schema\";\n\n/**\n * Helper to parse PerseusItem JSON\n * Why not just use JSON.parse? We want:\n * - To make sure types are correct\n * - To give us a central place to validate/transform output if needed\n * @deprecated - use parseAndMigratePerseusItem instead\n * @param {string} json - the stringified PerseusItem JSON\n * @returns {PerseusItem} the parsed PerseusItem object\n */\nexport function parsePerseusItem(json: string): PerseusItem {\n // Try to block a cheating vector which relies on monkey-patching\n // JSON.parse\n if (isRealJSONParse(JSON.parse)) {\n return JSON.parse(json);\n }\n throw new Error(\"Something went wrong.\");\n}\n\nexport type ParseFailureDetail = {\n /**\n * A human-readable error message describing where in the object tree\n * parsing failed.\n */\n message: string;\n /**\n * The raw result of parsing the input JSON, with no migrations applied.\n * Use at your own risk.\n */\n invalidObject: unknown;\n};\n\n/**\n * Parses a PerseusItem from a JSON string, migrates old formats to the latest\n * schema, and runtime-typechecks the result. Use this to parse assessmentItem\n * data.\n *\n * @returns a {@link Result} of the parsed PerseusItem. If the result is a\n * failure, it will contain an error message describing where in the tree\n * parsing failed.\n * @throws SyntaxError if the argument is not well-formed JSON.\n */\nexport function parseAndMigratePerseusItem(\n json: string,\n): Result<PerseusItem, ParseFailureDetail> {\n throwErrorIfCheatingDetected();\n const object: unknown = JSON.parse(json);\n const result = parse(object, migrateAndTypecheckPerseusItem);\n if (isFailure(result)) {\n return failure({message: result.detail, invalidObject: object});\n }\n return result;\n}\n\n/**\n * Parses a PerseusArticle from a JSON string, migrates old formats to the\n * latest schema, and runtime-typechecks the result.\n *\n * @returns a {@link Result} of the parsed PerseusArticle. If the result is a\n * failure, it will contain an error message describing where in the tree\n * parsing failed.\n * @throws SyntaxError if the argument is not well-formed JSON.\n */\nexport function parseAndMigratePerseusArticle(\n json: string,\n): Result<PerseusArticle, ParseFailureDetail> {\n throwErrorIfCheatingDetected();\n const object: unknown = JSON.parse(json);\n const result = parse(object, migrateAndTypecheckPerseusArticle);\n if (isFailure(result)) {\n return failure({message: result.detail, invalidObject: object});\n }\n return result;\n}\n\n/**\n * Tries to block a cheating vector that relies on monkey-patching JSON.parse.\n */\n// TODO(LEMS-2331): delete this function once server-side scoring is done.\nfunction throwErrorIfCheatingDetected() {\n if (!isRealJSONParse(JSON.parse)) {\n throw new Error(\"Something went wrong.\");\n }\n}\n","// 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 \"./utils/add-library-version-to-perseus-debug\";\n\nconst libName = \"@khanacademy/perseus-core\";\nexport const libVersion = \"__lib_version__\";\n\naddLibraryVersionToPerseusDebug(libName, libVersion);\n","/**\n * @typedef {Object} Errors utility for referencing the Perseus error taxonomy.\n */\nexport const Errors = Object.freeze({\n /**\n * @property {ErrorKind} Unknown The kind of error is not known.\n */\n Unknown: \"Unknown\",\n /**\n * @property {ErrorKind} Internal The error is internal to the executing code.\n */\n Internal: \"Internal\",\n /**\n * @property {ErrorKind} InvalidInput There was a problem with the provided\n * input, such as the wrong format or a null value.\n */\n InvalidInput: \"InvalidInput\",\n /**\n * @property {ErrorKind} NotAllowed There was a problem due to the state of\n * the system not matching the requested operation or input. For example,\n * trying to create a username that is valid, but is already taken by\n * another user. Use {@link InvalidInput} instead when the input isn't\n * valid regardless of the state of the system. Use {@link NotFound} when\n * the failure is due to not being able to find a resource.\n */\n NotAllowed: \"NotAllowed\",\n /**\n * @property {ErrorKind} TransientService There was a problem when making a\n * request to a service.\n */\n TransientService: \"TransientService\",\n /**\n * @property {ErrorKind} Service There was a non-transient problem when\n * making a request to service.\n */\n Service: \"Service\",\n});\n\n/**\n * @type {ErrorKind} The kind of error being reported\n */\nexport type ErrorKind = (typeof Errors)[keyof typeof Errors];\n","import type {ErrorKind} from \"./errors\";\nimport type {Metadata} from \"@khanacademy/wonder-stuff-core\";\n\ntype Options = {\n metadata?: Metadata | null | undefined;\n};\n\nexport class PerseusError extends Error {\n kind: ErrorKind;\n metadata: Metadata | null | undefined;\n\n constructor(message: string, kind: ErrorKind, options?: Options) {\n super(message);\n this.kind = kind;\n this.metadata = options?.metadata;\n }\n}\n","/**\n * _ utilities for objects\n */\n\nimport _ from \"underscore\";\n\n/**\n * Does a pluck on keys inside objects in an object\n *\n * Ex:\n * tools = {\n * translation: {\n * enabled: true\n * },\n * rotation: {\n * enabled: false\n * }\n * };\n * pluckObject(tools, \"enabled\") returns {\n * translation: true\n * rotation: false\n * }\n */\nexport const pluck = function (table: any, subKey: string): any {\n return _.object(\n _.map(table, function (value, key) {\n return [key, value[subKey]];\n }),\n );\n};\n\n/**\n * Maps an object to an object\n *\n * > mapObject({a: '1', b: '2'}, (value, key) => {\n * return value + 1;\n * });\n * {a: 2, b: 3}\n */\nexport const mapObject = function <K extends string, V, U>(\n obj: Record<K, V>,\n lambda: (arg1: V, arg2: K) => U,\n): Record<K, U> {\n const result: Record<string, any> = {};\n Object.keys(obj).forEach((key) => {\n // @ts-expect-error - TS2345 - Argument of type 'string' is not assignable to parameter of type 'K'.\n result[key] = lambda(obj[key], key);\n });\n return result;\n};\n","import type {PerseusCategorizerWidgetOptions} from \"@khanacademy/perseus-core\";\n\n/**\n * For details on the individual options, see the\n * PerseusCategorizerWidgetOptions type\n */\ntype CategorizerPublicWidgetOptions = {\n items: PerseusCategorizerWidgetOptions[\"items\"];\n categories: PerseusCategorizerWidgetOptions[\"categories\"];\n randomizeItems: PerseusCategorizerWidgetOptions[\"randomizeItems\"];\n static: PerseusCategorizerWidgetOptions[\"static\"];\n};\n\n/**\n * Given a PerseusCategorizerWidgetOptions object, return a new object with only\n * the public options that should be exposed to the client.\n */\nfunction getCategorizerPublicWidgetOptions(\n options: PerseusCategorizerWidgetOptions,\n): CategorizerPublicWidgetOptions {\n return {\n items: options.items,\n categories: options.categories,\n randomizeItems: options.randomizeItems,\n static: options.static,\n };\n}\n\nexport default getCategorizerPublicWidgetOptions;\n","import getCategorizerPublicWidgetOptions from \"./categorizer-util\";\n\nimport type {PerseusCategorizerWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type CategorizerDefaultWidgetOptions = Pick<\n PerseusCategorizerWidgetOptions,\n \"items\" | \"categories\" | \"values\" | \"randomizeItems\"\n>;\n\nconst defaultWidgetOptions: CategorizerDefaultWidgetOptions = {\n items: [],\n categories: [],\n values: [],\n randomizeItems: false,\n};\n\nconst categorizerWidgetLogic: WidgetLogic = {\n name: \"categorizer\",\n defaultWidgetOptions,\n getPublicWidgetOptions: getCategorizerPublicWidgetOptions,\n};\n\nexport default categorizerWidgetLogic;\n","import type {PerseusCSProgramWidgetOptions} from \"../../data-schema\";\n\nexport default function getCSProgramPublicWidgetOptions(\n options: PerseusCSProgramWidgetOptions,\n): PerseusCSProgramWidgetOptions {\n return options;\n}\n","import getCSProgramPublicWidgetOptions from \"./cs-program-util\";\n\nimport type {PerseusCSProgramWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type CSProgramDefaultWidgetOptions = Pick<\n PerseusCSProgramWidgetOptions,\n | \"programID\"\n | \"programType\"\n | \"settings\"\n | \"showEditor\"\n | \"showButtons\"\n | \"height\"\n>;\n\nconst DEFAULT_HEIGHT = 400;\n\nconst defaultWidgetOptions: CSProgramDefaultWidgetOptions = {\n programID: \"\",\n programType: null,\n settings: [{name: \"\", value: \"\"}],\n showEditor: false,\n showButtons: false,\n height: DEFAULT_HEIGHT,\n};\n\nconst csProgramWidgetLogic: WidgetLogic = {\n name: \"cs-program\",\n defaultWidgetOptions,\n supportedAlignments: [\"block\", \"full-width\"],\n getPublicWidgetOptions: getCSProgramPublicWidgetOptions,\n};\n\nexport default csProgramWidgetLogic;\n","import type {PerseusDefinitionWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type DefinitionDefaultWidgetOptions = Pick<\n PerseusDefinitionWidgetOptions,\n \"togglePrompt\" | \"definition\"\n>;\n\nconst defaultWidgetOptions: DefinitionDefaultWidgetOptions = {\n togglePrompt: \"\",\n definition: \"\",\n};\n\nconst definitionWidgetLogic: WidgetLogic = {\n name: \"definition\",\n defaultWidgetOptions,\n defaultAlignment: \"inline\",\n};\n\nexport default definitionWidgetLogic;\n","import type {PerseusDropdownWidgetOptions} from \"@khanacademy/perseus-core\";\n\n/**\n * For details on the individual options, see the\n * PerseusDropdownWidgetOptions type\n */\ntype DropdownPublicWidgetOptions = {\n choices: ReadonlyArray<{content: string}>;\n placeholder: PerseusDropdownWidgetOptions[\"placeholder\"];\n static: PerseusDropdownWidgetOptions[\"static\"];\n visibleLabel?: PerseusDropdownWidgetOptions[\"visibleLabel\"];\n ariaLabel?: PerseusDropdownWidgetOptions[\"ariaLabel\"];\n};\n\n/**\n * Given a PerseusDropdownWidgetOptions object, return a new object with only\n * the public options that should be exposed to the client.\n */\nfunction getDropdownPublicWidgetOptions(\n options: PerseusDropdownWidgetOptions,\n): DropdownPublicWidgetOptions {\n return {\n choices: options.choices.map((choice) => ({content: choice.content})),\n placeholder: options.placeholder,\n static: options.static,\n visibleLabel: options.visibleLabel,\n ariaLabel: options.ariaLabel,\n };\n}\n\nexport default getDropdownPublicWidgetOptions;\n","import getDropdownPublicWidgetOptions from \"./dropdown-util\";\n\nimport type {PerseusDropdownWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type DropdownDefaultWidgetOptions = Pick<\n PerseusDropdownWidgetOptions,\n \"placeholder\" | \"choices\"\n>;\n\nconst defaultWidgetOptions: DropdownDefaultWidgetOptions = {\n placeholder: \"\",\n choices: [\n {\n content: \"\",\n correct: false,\n },\n ],\n};\n\nconst dropdownWidgetLogic: WidgetLogic = {\n name: \"definition\",\n defaultWidgetOptions,\n defaultAlignment: \"inline-block\",\n getPublicWidgetOptions: getDropdownPublicWidgetOptions,\n};\n\nexport default dropdownWidgetLogic;\n","import type {PerseusExplanationWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type ExplanationDefaultWidgetOptions = Pick<\n PerseusExplanationWidgetOptions,\n \"showPrompt\" | \"hidePrompt\" | \"explanation\" | \"widgets\"\n>;\n\nconst defaultWidgetOptions: ExplanationDefaultWidgetOptions = {\n showPrompt: \"Explain\",\n hidePrompt: \"Hide explanation\",\n explanation: \"explanation goes here\\n\\nmore explanation\",\n widgets: {},\n};\n\nconst explanationWidgetLogic: WidgetLogic = {\n name: \"explanation\",\n defaultWidgetOptions,\n defaultAlignment: \"inline\",\n};\n\nexport default explanationWidgetLogic;\n","import type {PerseusExpressionWidgetOptions} from \"../../data-schema\";\n\nexport const currentVersion = {major: 1, minor: 0};\n\nexport const widgetOptionsUpgrades = {\n \"1\": (v0options: any): PerseusExpressionWidgetOptions => ({\n times: v0options.times,\n buttonSets: v0options.buttonSets,\n functions: v0options.functions,\n buttonsVisible: v0options.buttonsVisible,\n visibleLabel: v0options.visibleLabel,\n ariaLabel: v0options.ariaLabel,\n\n answerForms: [\n {\n considered: \"correct\",\n form: v0options.form,\n simplify: v0options.simplify,\n value: v0options.value,\n },\n ],\n }),\n} as const;\n\nexport type ExpressionDefaultWidgetOptions = Pick<\n PerseusExpressionWidgetOptions,\n \"answerForms\" | \"times\" | \"buttonSets\" | \"functions\"\n>;\n\nexport const defaultWidgetOptions: ExpressionDefaultWidgetOptions = {\n answerForms: [],\n times: false,\n buttonSets: [\"basic\"],\n functions: [\"f\", \"g\", \"h\"],\n};\n","import type {PerseusExpressionWidgetOptions} from \"@khanacademy/perseus-core\";\n\n/**\n * For details on the individual options, see the\n * PerseusExpressionWidgetOptions type\n */\ntype ExpressionPublicWidgetOptions = {\n buttonSets: PerseusExpressionWidgetOptions[\"buttonSets\"];\n functions: PerseusExpressionWidgetOptions[\"functions\"];\n times: PerseusExpressionWidgetOptions[\"times\"];\n visibleLabel?: PerseusExpressionWidgetOptions[\"visibleLabel\"];\n ariaLabel?: PerseusExpressionWidgetOptions[\"ariaLabel\"];\n buttonsVisible?: PerseusExpressionWidgetOptions[\"buttonsVisible\"];\n};\n\n/**\n * Given a PerseusExpressionWidgetOptions object, return a new object with only\n * the public options that should be exposed to the client.\n */\nfunction getExpressionPublicWidgetOptions(\n options: PerseusExpressionWidgetOptions,\n): ExpressionPublicWidgetOptions {\n return {\n buttonSets: options.buttonSets,\n functions: options.functions,\n times: options.times,\n visibleLabel: options.visibleLabel,\n ariaLabel: options.ariaLabel,\n buttonsVisible: options.buttonsVisible,\n };\n}\n\nexport default getExpressionPublicWidgetOptions;\n","import {\n currentVersion,\n defaultWidgetOptions,\n widgetOptionsUpgrades,\n} from \"./expression-upgrade\";\nimport getExpressionPublicWidgetOptions from \"./expression-util\";\n\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type {ExpressionDefaultWidgetOptions} from \"./expression-upgrade\";\n\nconst expressionWidgetLogic: WidgetLogic = {\n name: \"expression\",\n version: currentVersion,\n widgetOptionsUpgrades: widgetOptionsUpgrades,\n defaultWidgetOptions: defaultWidgetOptions,\n defaultAlignment: \"inline-block\",\n getPublicWidgetOptions: getExpressionPublicWidgetOptions,\n};\n\nexport default expressionWidgetLogic;\n","import type {PerseusGradedGroupWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type GradedGroupDefaultWidgetOptions = Pick<\n PerseusGradedGroupWidgetOptions,\n \"title\" | \"content\" | \"widgets\" | \"images\" | \"hint\"\n>;\n\nconst defaultWidgetOptions: GradedGroupDefaultWidgetOptions = {\n title: \"\",\n content: \"\",\n widgets: {},\n images: {},\n hint: null,\n};\n\nconst gradedGroupWidgetLogic: WidgetLogic = {\n name: \"graded-group\",\n defaultWidgetOptions,\n};\n\nexport default gradedGroupWidgetLogic;\n","import type {PerseusGradedGroupSetWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type GradedGroupSetDefaultWidgetOptions = Pick<\n PerseusGradedGroupSetWidgetOptions,\n \"gradedGroups\"\n>;\n\nconst defaultWidgetOptions: GradedGroupSetDefaultWidgetOptions = {\n gradedGroups: [],\n};\n\nconst gradedGroupSetWidgetLogic: WidgetLogic = {\n name: \"graded-group-set\",\n defaultWidgetOptions,\n};\n\nexport default gradedGroupSetWidgetLogic;\n","import type {PerseusGrapherWidgetOptions} from \"../../data-schema\";\n\ntype GrapherPublicWidgetOptions = Pick<\n PerseusGrapherWidgetOptions,\n \"availableTypes\" | \"graph\"\n>;\n\nexport default function getGrapherPublicWidgetOptions(\n options: PerseusGrapherWidgetOptions,\n): GrapherPublicWidgetOptions {\n const {correct: _, ...publicOptions} = options;\n return publicOptions;\n}\n","import getGrapherPublicWidgetOptions from \"./grapher-util\";\n\nimport type {PerseusGrapherWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type GrapherDefaultWidgetOptions = Pick<\n PerseusGrapherWidgetOptions,\n \"graph\" | \"correct\" | \"availableTypes\"\n>;\n\nconst defaultWidgetOptions: GrapherDefaultWidgetOptions = {\n graph: {\n labels: [\"x\", \"y\"],\n range: [\n [-10, 10],\n [-10, 10],\n ],\n step: [1, 1],\n backgroundImage: {\n url: null,\n },\n markings: \"graph\",\n rulerLabel: \"\",\n rulerTicks: 10,\n valid: true,\n showTooltips: false,\n },\n correct: {\n type: \"linear\",\n coords: null,\n },\n availableTypes: [\"linear\"],\n};\n\nconst grapherWidgetLogic: WidgetLogic = {\n name: \"grapher\",\n defaultWidgetOptions,\n getPublicWidgetOptions: getGrapherPublicWidgetOptions,\n};\n\nexport default grapherWidgetLogic;\n","import type {PerseusGroupWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type GroupDefaultWidgetOptions = Pick<\n PerseusGroupWidgetOptions,\n \"content\" | \"widgets\" | \"images\"\n>;\n\nconst defaultWidgetOptions: GroupDefaultWidgetOptions = {\n content: \"\",\n widgets: {},\n images: {},\n};\n\nconst groupWidgetLogic: WidgetLogic = {\n name: \"group\",\n defaultWidgetOptions,\n};\n\nexport default groupWidgetLogic;\n","import type {PerseusIFrameWidgetOptions} from \"../../data-schema\";\n\nexport default function getIFramePublicWidgetOptions(\n options: PerseusIFrameWidgetOptions,\n): PerseusIFrameWidgetOptions {\n return options;\n}\n","import getIFramePublicWidgetOptions from \"./iframe-util\";\n\nimport type {PerseusIFrameWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type IFrameDefaultWidgetOptions = Pick<\n PerseusIFrameWidgetOptions,\n | \"url\"\n | \"settings\"\n | \"width\"\n | \"height\"\n | \"allowFullScreen\"\n | \"allowTopNavigation\"\n>;\n\nconst defaultWidgetOptions: IFrameDefaultWidgetOptions = {\n url: \"\",\n settings: [{name: \"\", value: \"\"}],\n width: \"400\",\n height: \"400\",\n allowFullScreen: false,\n allowTopNavigation: false,\n};\n\nconst iframeWidgetLogic: WidgetLogic = {\n name: \"iframe\",\n defaultWidgetOptions,\n getPublicWidgetOptions: getIFramePublicWidgetOptions,\n};\n\nexport default iframeWidgetLogic;\n","import type {PerseusImageWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type ImageDefaultWidgetOptions = Pick<\n PerseusImageWidgetOptions,\n \"title\" | \"range\" | \"box\" | \"backgroundImage\" | \"labels\" | \"alt\" | \"caption\"\n>;\n\nconst defaultWidgetOptions: ImageDefaultWidgetOptions = {\n title: \"\",\n range: [\n [0, 10],\n [0, 10],\n ],\n box: [400, 400],\n backgroundImage: {\n url: null,\n width: 0,\n height: 0,\n },\n labels: [],\n alt: \"\",\n caption: \"\",\n};\n\nconst imageWidgetLogic: WidgetLogic = {\n name: \"image\",\n defaultWidgetOptions,\n supportedAlignments: [\"block\", \"full-width\"],\n defaultAlignment: \"block\",\n};\n\nexport default imageWidgetLogic;\n","import type {PerseusInputNumberWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type InputNumberDefaultWidgetOptions = Pick<\n PerseusInputNumberWidgetOptions,\n | \"value\"\n | \"simplify\"\n | \"size\"\n | \"inexact\"\n | \"maxError\"\n | \"answerType\"\n | \"rightAlign\"\n>;\n\nconst defaultWidgetOptions: InputNumberDefaultWidgetOptions = {\n value: 0,\n simplify: \"required\",\n size: \"normal\",\n inexact: false,\n maxError: 0.1,\n answerType: \"number\",\n rightAlign: false,\n};\n\nconst inputNumberWidgetLogic: WidgetLogic = {\n name: \"input-number\",\n defaultWidgetOptions,\n defaultAlignment: \"inline-block\",\n};\n\nexport default inputNumberWidgetLogic;\n","import type {PerseusInteractionWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type InteractionDefaultWidgetOptions = Pick<\n PerseusInteractionWidgetOptions,\n \"graph\" | \"elements\"\n>;\n\nconst defaultWidgetOptions: InteractionDefaultWidgetOptions = {\n graph: {\n box: [400, 400],\n labels: [\"x\", \"y\"],\n range: [\n [-10, 10],\n [-10, 10],\n ],\n tickStep: [1, 1],\n gridStep: [1, 1],\n markings: \"graph\",\n },\n elements: [],\n};\n\nconst interactionWidgetLogic: WidgetLogic = {\n name: \"interaction\",\n defaultWidgetOptions,\n};\n\nexport default interactionWidgetLogic;\n","import type {PerseusInteractiveGraphWidgetOptions} from \"@khanacademy/perseus-core\";\n\ntype InteractiveGraphPublicWidgetOptions = Pick<\n PerseusInteractiveGraphWidgetOptions,\n | \"step\"\n | \"gridStep\"\n | \"snapStep\"\n | \"backgroundImage\"\n | \"markings\"\n | \"labels\"\n | \"showProtractor\"\n | \"showRuler\"\n | \"showTooltips\"\n | \"rulerLabel\"\n | \"rulerTicks\"\n | \"range\"\n | \"graph\"\n | \"lockedFigures\"\n | \"fullGraphAriaLabel\"\n | \"fullGraphAriaDescription\"\n>;\n\nexport default function getInteractiveGraphPublicWidgetOptions(\n options: PerseusInteractiveGraphWidgetOptions,\n): InteractiveGraphPublicWidgetOptions {\n const {correct: _, ...publicOptions} = options;\n return publicOptions;\n}\n","import getInteractiveGraphPublicWidgetOptions from \"./interactive-graph-util\";\n\nimport type {PerseusInteractiveGraphWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type InteractiveGraphDefaultWidgetOptions = Pick<\n PerseusInteractiveGraphWidgetOptions,\n | \"labels\"\n | \"range\"\n | \"step\"\n | \"backgroundImage\"\n | \"markings\"\n | \"showTooltips\"\n | \"showProtractor\"\n | \"graph\"\n | \"correct\"\n>;\n\nconst defaultWidgetOptions: InteractiveGraphDefaultWidgetOptions = {\n labels: [\"x\", \"y\"],\n range: [\n [-10, 10],\n [-10, 10],\n ],\n step: [1, 1],\n backgroundImage: {\n url: null,\n },\n markings: \"graph\",\n showTooltips: false,\n showProtractor: false,\n graph: {\n type: \"linear\",\n },\n correct: {\n type: \"linear\",\n coords: null,\n },\n};\n\nconst interactiveGraphWidgetLogic: WidgetLogic = {\n name: \"interactive-graph\",\n defaultWidgetOptions,\n getPublicWidgetOptions: getInteractiveGraphPublicWidgetOptions,\n};\n\nexport default interactiveGraphWidgetLogic;\n","import type {\n PerseusLabelImageMarker,\n PerseusLabelImageWidgetOptions,\n} from \"@khanacademy/perseus-core\";\n\n/**\n * For details on the individual options, see the\n * PerseusLabelImageWidgetOptions type\n */\ntype LabelImagePublicWidgetOptions = {\n choices: PerseusLabelImageWidgetOptions[\"choices\"];\n imageUrl: PerseusLabelImageWidgetOptions[\"imageUrl\"];\n imageAlt: PerseusLabelImageWidgetOptions[\"imageAlt\"];\n imageHeight: PerseusLabelImageWidgetOptions[\"imageHeight\"];\n imageWidth: PerseusLabelImageWidgetOptions[\"imageWidth\"];\n markers: ReadonlyArray<LabelImageMarkerPublicData>;\n hideChoicesFromInstructions: PerseusLabelImageWidgetOptions[\"hideChoicesFromInstructions\"];\n multipleAnswers: PerseusLabelImageWidgetOptions[\"multipleAnswers\"];\n static: PerseusLabelImageWidgetOptions[\"static\"];\n};\n\ntype LabelImageMarkerPublicData = Pick<\n PerseusLabelImageMarker,\n \"x\" | \"y\" | \"label\"\n>;\n\nexport default function getLabelImagePublicWidgetOptions(\n options: PerseusLabelImageWidgetOptions,\n): LabelImagePublicWidgetOptions {\n return {\n ...options,\n markers: options.markers.map(getLabelImageMarkerPublicData),\n };\n}\n\nfunction getLabelImageMarkerPublicData(\n marker: PerseusLabelImageMarker,\n): LabelImageMarkerPublicData {\n const {answers: _, ...publicData} = marker;\n return publicData;\n}\n","import getLabelImagePublicWidgetOptions from \"./label-image-util\";\n\nimport type {PerseusLabelImageWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type LabelImageDefaultWidgetOptions = Pick<\n PerseusLabelImageWidgetOptions,\n | \"choices\"\n | \"imageAlt\"\n | \"imageUrl\"\n | \"imageWidth\"\n | \"imageHeight\"\n | \"markers\"\n | \"multipleAnswers\"\n | \"hideChoicesFromInstructions\"\n>;\n\nconst defaultWidgetOptions: LabelImageDefaultWidgetOptions = {\n choices: [],\n imageAlt: \"\",\n imageUrl: \"\",\n imageWidth: 0,\n imageHeight: 0,\n markers: [],\n multipleAnswers: false,\n hideChoicesFromInstructions: false,\n};\n\nconst labelImageWidgetLogic: WidgetLogic = {\n name: \"label-image\",\n defaultWidgetOptions,\n getPublicWidgetOptions: getLabelImagePublicWidgetOptions,\n};\n\nexport default labelImageWidgetLogic;\n","import {seededRNG, shuffle} from \"@khanacademy/perseus-core\";\n\nimport type {PerseusMatcherWidgetOptions} from \"@khanacademy/perseus-core\";\n\n// TODO(LEMS-2841): Should be able to remove once getPublicWidgetOptions is hooked up\ntype MatcherInfo = {\n left: ReadonlyArray<string>;\n right: ReadonlyArray<string>;\n orderMatters: boolean;\n problemNum: number | null | undefined;\n};\n\ntype MatcherShuffleInfo = {\n left: ReadonlyArray<string>;\n right: ReadonlyArray<string>;\n orderMatters: boolean;\n};\n\n// TODO(LEMS-2841): Should be able to remove once getPublicWidgetOptions is hooked up\nexport const shuffleMatcher = (\n props: MatcherInfo,\n): {left: ReadonlyArray<string>; right: ReadonlyArray<string>} => {\n // Use the same random() function to shuffle both columns sequentially\n const rng = seededRNG(props.problemNum as number);\n\n let left;\n if (!props.orderMatters) {\n // If the order doesn't matter, don't shuffle the left column\n left = props.left;\n } else {\n left = shuffle(props.left, rng, /* ensurePermuted */ true);\n }\n\n const right = shuffle(props.right, rng, /* ensurePermuted */ true);\n\n return {left, right};\n};\n\n// TODO(LEMS-2841): Can shorten to shuffleMatcher after above function removed\nfunction shuffleMatcherWithRandom(data: MatcherShuffleInfo): {\n left: ReadonlyArray<string>;\n right: ReadonlyArray<string>;\n} {\n // Use the same random() function to shuffle both columns sequentially\n let left;\n if (!data.orderMatters) {\n // If the order doesn't matter, don't shuffle the left column\n left = data.left;\n } else {\n left = shuffle(data.left, Math.random, /* ensurePermuted */ true);\n }\n\n const right = shuffle(data.right, Math.random, /* ensurePermuted */ true);\n\n return {left, right};\n}\n\n/**\n * For details on the individual options, see the\n * PerseusMatcherWidgetOptions type\n */\ntype MatcherPublicWidgetOptions = {\n labels: PerseusMatcherWidgetOptions[\"labels\"];\n left: PerseusMatcherWidgetOptions[\"left\"];\n right: PerseusMatcherWidgetOptions[\"right\"];\n orderMatters: PerseusMatcherWidgetOptions[\"orderMatters\"];\n padding: PerseusMatcherWidgetOptions[\"padding\"];\n};\n\n/**\n * Given a PerseusMatcherWidgetOptions object, return a new object with only\n * the public options that should be exposed to the client.\n */\nfunction getMatcherPublicWidgetOptions(\n options: PerseusMatcherWidgetOptions,\n): MatcherPublicWidgetOptions {\n const {left, right} = shuffleMatcherWithRandom(options);\n\n return {\n ...options,\n left: left,\n right: right,\n };\n}\n\nexport default getMatcherPublicWidgetOptions;\n","import getMatcherPublicWidgetOptions from \"./matcher-util\";\n\nimport type {PerseusMatcherWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type MatcherDefaultWidgetOptions = Pick<\n PerseusMatcherWidgetOptions,\n \"left\" | \"right\" | \"labels\" | \"orderMatters\" | \"padding\"\n>;\n\nconst defaultWidgetOptions: MatcherDefaultWidgetOptions = {\n left: [\"$x$\", \"$y$\", \"$z$\"],\n right: [\"$1$\", \"$2$\", \"$3$\"],\n labels: [\"test\", \"label\"],\n orderMatters: false,\n padding: true,\n};\n\nconst matcherWidgetLogic: WidgetLogic = {\n name: \"matcher\",\n defaultWidgetOptions,\n getPublicWidgetOptions: getMatcherPublicWidgetOptions,\n};\n\nexport default matcherWidgetLogic;\n","import type {PerseusMatrixWidgetOptions} from \"@khanacademy/perseus-core\";\n\ntype MatrixPublicWidgetOptions = Pick<\n PerseusMatrixWidgetOptions,\n \"prefix\" | \"suffix\" | \"cursorPosition\" | \"matrixBoardSize\" | \"static\"\n>;\n\nexport default function getMatrixPublicWidgetOptions(\n options: PerseusMatrixWidgetOptions,\n): MatrixPublicWidgetOptions {\n const {answers: _, ...publicOptions} = options;\n return publicOptions;\n}\n","import getMatrixPublicWidgetOptions from \"./matrix-util\";\n\nimport type {PerseusMatrixWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type MatrixDefaultWidgetOptions = Pick<\n PerseusMatrixWidgetOptions,\n \"matrixBoardSize\" | \"answers\" | \"prefix\" | \"suffix\" | \"cursorPosition\"\n>;\n\nconst defaultWidgetOptions: MatrixDefaultWidgetOptions = {\n matrixBoardSize: [3, 3],\n answers: [[]],\n prefix: \"\",\n suffix: \"\",\n cursorPosition: [0, 0],\n};\n\nconst matrixWidgetLogic: WidgetLogic = {\n name: \"matrix\",\n defaultWidgetOptions,\n getPublicWidgetOptions: getMatrixPublicWidgetOptions,\n};\n\nexport default matrixWidgetLogic;\n","import type {PerseusMeasurerWidgetOptions} from \"../../data-schema\";\n\nexport const currentVersion = {major: 1, minor: 0};\n\nexport const widgetOptionsUpgrades = {\n \"1\": (v0options: any): PerseusMeasurerWidgetOptions => {\n const {imageUrl, imageTop, imageLeft, ...rest} = v0options;\n\n return {\n ...rest,\n image: {\n url: imageUrl,\n top: imageTop,\n left: imageLeft,\n },\n };\n },\n} as const;\n\nexport type MeasurerDefaultWidgetOptions = Pick<\n PerseusMeasurerWidgetOptions,\n | \"box\"\n | \"image\"\n | \"showProtractor\"\n | \"showRuler\"\n | \"rulerLabel\"\n | \"rulerTicks\"\n | \"rulerPixels\"\n | \"rulerLength\"\n>;\n\nexport const defaultWidgetOptions: MeasurerDefaultWidgetOptions = {\n box: [480, 480],\n image: {} as any,\n showProtractor: true,\n showRuler: false,\n rulerLabel: \"\",\n rulerTicks: 10,\n rulerPixels: 40,\n rulerLength: 10,\n};\n","import {\n currentVersion,\n defaultWidgetOptions,\n widgetOptionsUpgrades,\n} from \"./measurer-upgrade\";\n\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type {MeasurerDefaultWidgetOptions} from \"./measurer-upgrade\";\n\nconst measurerWidgetLogic: WidgetLogic = {\n name: \"measurer\",\n version: currentVersion,\n widgetOptionsUpgrades: widgetOptionsUpgrades,\n defaultWidgetOptions: defaultWidgetOptions,\n};\n\nexport default measurerWidgetLogic;\n","import type {PerseusNumberLineWidgetOptions} from \"../../data-schema\";\n\ntype NumberLinePublicWidgetOptions = Pick<\n PerseusNumberLineWidgetOptions,\n | \"range\"\n | \"labelRange\"\n | \"labelStyle\"\n | \"labelTicks\"\n | \"isTickCtrl\"\n | \"divisionRange\"\n | \"numDivisions\"\n | \"snapDivisions\"\n | \"tickStep\"\n | \"initialX\"\n | \"showTooltips\"\n | \"static\"\n>;\n\nexport default function getNumberLinePublicWidgetOptions(\n options: PerseusNumberLineWidgetOptions,\n): NumberLinePublicWidgetOptions {\n const {correctX: _, correctRel: __, ...publicOptions} = options;\n return publicOptions;\n}\n","import getNumberLinePublicWidgetOptions from \"./number-line-util\";\n\nimport type {PerseusNumberLineWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type NumberLineDefaultWidgetOptions = Pick<\n PerseusNumberLineWidgetOptions,\n | \"range\"\n | \"labelRange\"\n | \"labelStyle\"\n | \"labelTicks\"\n | \"divisionRange\"\n | \"numDivisions\"\n | \"snapDivisions\"\n | \"tickStep\"\n | \"correctRel\"\n | \"correctX\"\n | \"initialX\"\n | \"showTooltips\"\n>;\n\nconst defaultWidgetOptions: NumberLineDefaultWidgetOptions = {\n range: [0, 10],\n\n labelRange: [null, null],\n labelStyle: \"decimal\",\n labelTicks: true,\n\n divisionRange: [1, 12],\n numDivisions: 5,\n snapDivisions: 2,\n\n tickStep: null,\n correctRel: \"eq\",\n correctX: null,\n initialX: null,\n\n showTooltips: false,\n};\n\nconst numberLineWidgetLogic: WidgetLogic = {\n name: \"number-line\",\n defaultWidgetOptions,\n getPublicWidgetOptions: getNumberLinePublicWidgetOptions,\n};\n\nexport default numberLineWidgetLogic;\n","import type {PerseusNumericInputWidgetOptions} from \"@khanacademy/perseus-core\";\n\n/**\n * For details on the individual options, see the\n * PerseusNumericInputWidgetOptions type\n */\ntype NumericInputPublicWidgetOptions = {\n labelText?: PerseusNumericInputWidgetOptions[\"labelText\"];\n size: PerseusNumericInputWidgetOptions[\"size\"];\n coefficient: PerseusNumericInputWidgetOptions[\"coefficient\"];\n rightAlign?: PerseusNumericInputWidgetOptions[\"rightAlign\"];\n static: PerseusNumericInputWidgetOptions[\"static\"];\n answerForms?: PerseusNumericInputWidgetOptions[\"answerForms\"];\n};\n\n/**\n * Given a PerseusNumericInputWidgetOptions object, return a new object with only\n * the public options that should be exposed to the client.\n */\nfunction getNumericInputPublicWidgetOptions(\n options: PerseusNumericInputWidgetOptions,\n): NumericInputPublicWidgetOptions {\n const {answers: _, ...publicWidgetOptions} = options;\n return publicWidgetOptions;\n}\n\nexport default getNumericInputPublicWidgetOptions;\n","import getNumericInputPublicWidgetOptions from \"./numeric-input-util\";\n\nimport type {PerseusNumericInputWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type NumericInputDefaultWidgetOptions = Pick<\n PerseusNumericInputWidgetOptions,\n \"answers\" | \"size\" | \"coefficient\" | \"labelText\" | \"rightAlign\"\n>;\n\nconst defaultWidgetOptions: NumericInputDefaultWidgetOptions = {\n answers: [\n {\n value: null,\n status: \"correct\",\n message: \"\",\n simplify: \"required\",\n answerForms: [],\n strict: false,\n maxError: null,\n },\n ],\n size: \"normal\",\n coefficient: false,\n labelText: \"\",\n rightAlign: false,\n};\n\nconst numericInputWidgetLogic: WidgetLogic = {\n name: \"numeric-input\",\n defaultWidgetOptions,\n defaultAlignment: \"inline-block\",\n getPublicWidgetOptions: getNumericInputPublicWidgetOptions,\n};\n\nexport default numericInputWidgetLogic;\n","import type {PerseusOrdererWidgetOptions} from \"@khanacademy/perseus-core\";\n\n/**\n * For details on the individual options, see the\n * PerseusOrdererWidgetOptions type\n */\ntype OrdererPublicWidgetOptions = {\n options: PerseusOrdererWidgetOptions[\"options\"];\n height: PerseusOrdererWidgetOptions[\"height\"];\n layout: PerseusOrdererWidgetOptions[\"layout\"];\n};\n\n/**\n * Given a PerseusOrdererWidgetOptions object, return a new object with only\n * the public options that should be exposed to the client.\n */\nfunction getOrdererPublicWidgetOptions(\n options: PerseusOrdererWidgetOptions,\n): OrdererPublicWidgetOptions {\n return {\n options: options.options,\n height: options.height,\n layout: options.layout,\n };\n}\n\nexport default getOrdererPublicWidgetOptions;\n","import getOrdererPublicWidgetOptions from \"./orderer-util\";\n\nimport type {PerseusOrdererWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type OrdererDefaultWidgetOptions = Pick<\n PerseusOrdererWidgetOptions,\n \"correctOptions\" | \"otherOptions\" | \"height\" | \"layout\"\n>;\n\nconst defaultWidgetOptions: OrdererDefaultWidgetOptions = {\n correctOptions: [{content: \"$x$\"}] as any,\n otherOptions: [{content: \"$y$\"}] as any,\n height: \"normal\",\n layout: \"horizontal\",\n};\n\nconst ordererWidgetLogic: WidgetLogic = {\n name: \"orderer\",\n defaultWidgetOptions,\n getPublicWidgetOptions: getOrdererPublicWidgetOptions,\n};\n\nexport default ordererWidgetLogic;\n","import type {PerseusPassageWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type PassageDefaultWidgetOptions = Pick<\n PerseusPassageWidgetOptions,\n \"passageTitle\" | \"passageText\" | \"footnotes\" | \"showLineNumbers\"\n>;\n\nconst defaultWidgetOptions: PassageDefaultWidgetOptions = {\n passageTitle: \"\",\n passageText: \"\",\n footnotes: \"\",\n showLineNumbers: true,\n};\n\nconst passageWidgetLogic: WidgetLogic = {\n name: \"passage\",\n defaultWidgetOptions,\n};\n\nexport default passageWidgetLogic;\n","import type {PerseusPassageRefWidgetOptions} from \"../../data-schema\";\n\nexport const currentVersion = {major: 0, minor: 1};\n\nexport type PassageRefDefaultWidgetOptions = Pick<\n PerseusPassageRefWidgetOptions,\n \"passageNumber\" | \"referenceNumber\" | \"summaryText\"\n>;\n\nexport const defaultWidgetOptions: PassageRefDefaultWidgetOptions = {\n passageNumber: 1,\n referenceNumber: 1,\n summaryText: \"\",\n};\n","import {currentVersion, defaultWidgetOptions} from \"./passage-ref-upgrade\";\n\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type {PassageRefDefaultWidgetOptions} from \"./passage-ref-upgrade\";\n\nconst passageRefWidgetLogic: WidgetLogic = {\n name: \"passageRef\",\n version: currentVersion,\n defaultWidgetOptions: defaultWidgetOptions,\n defaultAlignment: \"inline\",\n};\n\nexport default passageRefWidgetLogic;\n","import type {PerseusPassageRefTargetWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type PassageRefTargetDefaultWidgetOptions = Pick<\n PerseusPassageRefTargetWidgetOptions,\n \"content\"\n>;\n\nconst defaultWidgetOptions: PassageRefTargetDefaultWidgetOptions = {\n content: \"\",\n};\n\nconst passageRefTargetWidgetLogic: WidgetLogic = {\n name: \"passageRefTarget\",\n defaultWidgetOptions,\n defaultAlignment: \"inline\",\n};\n\nexport default passageRefTargetWidgetLogic;\n","import type {PerseusPhetSimulationWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type PhetSimulationDefaultWidgetOptions = Pick<\n PerseusPhetSimulationWidgetOptions,\n \"url\" | \"description\"\n>;\n\nconst defaultWidgetOptions: PhetSimulationDefaultWidgetOptions = {\n url: \"\",\n description: \"\",\n};\n\nconst phetSimulationWidgetLogic: WidgetLogic = {\n name: \"phet-simulation\",\n defaultWidgetOptions,\n};\n\nexport default phetSimulationWidgetLogic;\n","import type {PerseusPlotterWidgetOptions} from \"@khanacademy/perseus-core\";\n\n/**\n * For details on the individual options, see the\n * PerseusPlotterWidgetOptions type\n */\ntype PlotterPublicWidgetOptions = Omit<PerseusPlotterWidgetOptions, \"correct\">;\n\n/**\n * Given a PerseusPlotterWidgetOptions object, return a new object with only\n * the public options that should be exposed to the client.\n */\nfunction getPlotterPublicWidgetOptions(\n options: PerseusPlotterWidgetOptions,\n): PlotterPublicWidgetOptions {\n const {correct: _, ...publicOptions} = options;\n return publicOptions;\n}\n\nexport default getPlotterPublicWidgetOptions;\n","import getPlotterPublicWidgetOptions from \"./plotter-util\";\n\nimport type {PerseusPlotterWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type PlotterDefaultWidgetOptions = Pick<\n PerseusPlotterWidgetOptions,\n | \"scaleY\"\n | \"maxY\"\n | \"snapsPerLine\"\n | \"correct\"\n | \"starting\"\n | \"type\"\n | \"labels\"\n | \"categories\"\n | \"picSize\"\n | \"picBoxHeight\"\n | \"plotDimensions\"\n | \"labelInterval\"\n | \"picUrl\"\n>;\n\nconst defaultWidgetOptions: PlotterDefaultWidgetOptions = {\n scaleY: 1,\n maxY: 10,\n snapsPerLine: 2,\n correct: [1],\n starting: [1],\n\n type: \"bar\",\n labels: [\"\", \"\"],\n categories: [\"\"],\n\n picSize: 30,\n picBoxHeight: 36,\n plotDimensions: [275, 200],\n labelInterval: 1,\n\n picUrl: null,\n};\n\nconst plotterWidgetLogic: WidgetLogic = {\n name: \"plotter\",\n defaultWidgetOptions,\n getPublicWidgetOptions: getPlotterPublicWidgetOptions,\n};\n\nexport default plotterWidgetLogic;\n","import type {PerseusPythonProgramWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type PythonProgramDefaultWidgetOptions = Pick<\n PerseusPythonProgramWidgetOptions,\n \"programID\" | \"height\"\n>;\n\nconst defaultWidgetOptions: PythonProgramDefaultWidgetOptions = {\n programID: \"\",\n height: 400,\n};\n\nconst pythonProgramWidgetLogic: WidgetLogic = {\n name: \"python-program\",\n defaultWidgetOptions,\n};\n\nexport default pythonProgramWidgetLogic;\n","import type {PerseusRadioWidgetOptions} from \"../../data-schema\";\n\nexport const currentVersion = {major: 1, minor: 0};\n\nexport const widgetOptionsUpgrades = {\n \"1\": (v0props: any): PerseusRadioWidgetOptions => {\n const {noneOfTheAbove, ...rest} = v0props;\n\n if (noneOfTheAbove) {\n throw new Error(\n \"radio widget v0 no longer supports auto noneOfTheAbove\",\n );\n }\n\n return {\n ...rest,\n hasNoneOfTheAbove: false,\n };\n },\n} as const;\n\nexport type RadioDefaultWidgetOptions = Pick<\n PerseusRadioWidgetOptions,\n | \"choices\"\n | \"displayCount\"\n | \"randomize\"\n | \"hasNoneOfTheAbove\"\n | \"multipleSelect\"\n | \"countChoices\"\n | \"deselectEnabled\"\n>;\n\nexport const defaultWidgetOptions: RadioDefaultWidgetOptions = {\n choices: [{}, {}, {}, {}] as any,\n displayCount: null,\n randomize: false,\n hasNoneOfTheAbove: false,\n multipleSelect: false,\n countChoices: false,\n deselectEnabled: false,\n};\n","import type {\n PerseusRadioChoice,\n PerseusRadioWidgetOptions,\n} from \"@khanacademy/perseus-core\";\n\n/**\n * For details on the individual options, see the\n * PerseusRadioWidgetOptions type\n */\ntype RadioPublicWidgetOptions = {\n choices: ReadonlyArray<RadioChoicePublicData>;\n hasNoneOfTheAbove?: PerseusRadioWidgetOptions[\"hasNoneOfTheAbove\"];\n countChoices?: PerseusRadioWidgetOptions[\"countChoices\"];\n randomize?: PerseusRadioWidgetOptions[\"randomize\"];\n multipleSelect?: PerseusRadioWidgetOptions[\"multipleSelect\"];\n deselectEnabled?: PerseusRadioWidgetOptions[\"deselectEnabled\"];\n onePerLine?: PerseusRadioWidgetOptions[\"onePerLine\"];\n displayCount?: PerseusRadioWidgetOptions[\"displayCount\"];\n noneOfTheAbove?: PerseusRadioWidgetOptions[\"noneOfTheAbove\"];\n};\n\n/**\n * Only the options from each Radio choice that should be exposed to the client.\n */\ntype RadioChoicePublicData = Pick<\n PerseusRadioChoice,\n \"content\" | \"isNoneOfTheAbove\" | \"widgets\"\n>;\n\n/**\n * Given a PerseusRadioChoice object, return a new object with only the public\n * data that should be included in the Radio public widget options.\n */\nfunction getRadioChoicePublicData(\n choice: PerseusRadioChoice,\n): RadioChoicePublicData {\n const {content, isNoneOfTheAbove, widgets} = choice;\n return {\n content,\n isNoneOfTheAbove,\n widgets,\n };\n}\n\n/**\n * Given a PerseusRadioWidgetOptions object, return a new object with only\n * the public options that should be exposed to the client.\n */\nfunction getRadioPublicWidgetOptions(\n options: PerseusRadioWidgetOptions,\n): RadioPublicWidgetOptions {\n return {\n ...options,\n choices: options.choices.map(getRadioChoicePublicData),\n };\n}\n\nexport default getRadioPublicWidgetOptions;\n","import {\n currentVersion,\n defaultWidgetOptions,\n widgetOptionsUpgrades,\n} from \"./radio-upgrade\";\nimport getRadioPublicWidgetOptions from \"./radio-util\";\n\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type {RadioDefaultWidgetOptions} from \"./radio-upgrade\";\n\nconst radioWidgetLogic: WidgetLogic = {\n name: \"radio\",\n version: currentVersion,\n widgetOptionsUpgrades: widgetOptionsUpgrades,\n defaultWidgetOptions: defaultWidgetOptions,\n getPublicWidgetOptions: getRadioPublicWidgetOptions,\n};\n\nexport default radioWidgetLogic;\n","import {shuffle} from \"@khanacademy/perseus-core\";\n\nimport type {PerseusSorterWidgetOptions} from \"@khanacademy/perseus-core\";\n\n/**\n * For details on the individual options, see the\n * PerseusSorterWidgetOptions type\n */\ntype SorterPublicWidgetOptions = {\n correct: PerseusSorterWidgetOptions[\"correct\"];\n padding: PerseusSorterWidgetOptions[\"padding\"];\n layout: PerseusSorterWidgetOptions[\"layout\"];\n isCorrectShuffled: boolean;\n};\n\n/**\n * Given a PerseusSorterWidgetOptions object, return a new object with only\n * the public options that should be exposed to the client.\n */\nfunction getSorterPublicWidgetOptions(\n options: PerseusSorterWidgetOptions,\n): SorterPublicWidgetOptions {\n const shuffledCorrect = shuffle(\n options.correct,\n Math.random,\n /* ensurePermuted */ true,\n );\n\n return {\n ...options,\n // Note(Tamara): This does not provide correct answer information any longer.\n // To maintain compatibility with the original widget options, we are\n // keeping the key the same. Represents initial state of the cards here.\n correct: shuffledCorrect,\n // Note(Tamara): This new key is only added here with \"true\". There isn't\n // a place where it is set to false. It indicates that the correct field\n // has been shuffled and no longer contains correct answer info.\n isCorrectShuffled: true,\n };\n}\n\nexport default getSorterPublicWidgetOptions;\n","import getSorterPublicWidgetOptions from \"./sorter-util\";\n\nimport type {PerseusSorterWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type SorterDefaultWidgetOptions = Pick<\n PerseusSorterWidgetOptions,\n \"correct\" | \"layout\" | \"padding\"\n>;\n\nconst defaultWidgetOptions: SorterDefaultWidgetOptions = {\n correct: [\"$x$\", \"$y$\", \"$z$\"],\n layout: \"horizontal\",\n padding: true,\n};\n\nconst sorterWidgetLogic: WidgetLogic = {\n name: \"sorter\",\n defaultWidgetOptions,\n getPublicWidgetOptions: getSorterPublicWidgetOptions,\n};\n\nexport default sorterWidgetLogic;\n","import type {PerseusTableWidgetOptions} from \"@khanacademy/perseus-core\";\n\ntype TablePublicWidgetOptions = Pick<\n PerseusTableWidgetOptions,\n \"headers\" | \"rows\" | \"columns\"\n>;\n\nexport default function getTablePublicWidgetOptions(\n options: PerseusTableWidgetOptions,\n): TablePublicWidgetOptions {\n const {answers: _, ...publicOptions} = options;\n return publicOptions;\n}\n","import getTablePublicWidgetOptions from \"./table-util\";\n\nimport type {PerseusTableWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type TableDefaultWidgetOptions = Pick<\n PerseusTableWidgetOptions,\n \"headers\" | \"rows\" | \"columns\" | \"answers\"\n>;\n\nconst defaultRows = 4;\nconst defaultColumns = 1;\n\n// initialize a 2D array\n// (defaultRows x defaultColumns) of empty strings\nconst answers = new Array(defaultRows)\n .fill(0)\n .map(() => new Array(defaultColumns).fill(\"\"));\n\nconst defaultWidgetOptions: TableDefaultWidgetOptions = {\n headers: [\"\"],\n rows: defaultRows,\n columns: defaultColumns,\n answers: answers,\n};\n\nconst tableWidgetLogic: WidgetLogic = {\n name: \"table\",\n defaultWidgetOptions,\n getPublicWidgetOptions: getTablePublicWidgetOptions,\n};\n\nexport default tableWidgetLogic;\n","import type {PerseusVideoWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type VideoDefaultWidgetOptions = Pick<\n PerseusVideoWidgetOptions,\n \"location\"\n>;\n\nconst defaultWidgetOptions: VideoDefaultWidgetOptions = {\n location: \"\",\n};\n\nconst videoWidgetLogic: WidgetLogic = {\n name: \"video\",\n defaultWidgetOptions,\n supportedAlignments: [\"block\", \"float-left\", \"float-right\", \"full-width\"],\n defaultAlignment: \"block\",\n};\n\nexport default videoWidgetLogic;\n","import categorizerWidgetLogic from \"./categorizer\";\nimport csProgramWidgetLogic from \"./cs-program\";\nimport definitionWidgetLogic from \"./definition\";\nimport dropdownWidgetLogic from \"./dropdown\";\nimport explanationWidgetLogic from \"./explanation\";\nimport expressionWidgetLogic from \"./expression\";\nimport gradedGroupWidgetLogic from \"./graded-group\";\nimport gradedGroupSetWidgetLogic from \"./graded-group-set\";\nimport grapherWidgetLogic from \"./grapher\";\nimport groupWidgetLogic from \"./group\";\nimport iframeWidgetLogic from \"./iframe\";\nimport imageWidgetLogic from \"./image\";\nimport inputNumberWidgetLogic from \"./input-number\";\nimport interactionWidgetLogic from \"./interaction\";\nimport interactiveGraphWidgetLogic from \"./interactive-graph\";\nimport labelImageWidgetLogic from \"./label-image\";\nimport matcherWidgetLogic from \"./matcher\";\nimport matrixWidgetLogic from \"./matrix\";\nimport measurerWidgetLogic from \"./measurer\";\nimport numberLineWidgetLogic from \"./number-line\";\nimport numericInputWidgetLogic from \"./numeric-input\";\nimport ordererWidgetLogic from \"./orderer\";\nimport passageWidgetLogic from \"./passage\";\nimport passageRefWidgetLogic from \"./passage-ref\";\nimport passageRefTargetWidgetLogic from \"./passage-ref-target\";\nimport phetSimulationWidgetLogic from \"./phet-simulation\";\nimport plotterWidgetLogic from \"./plotter\";\nimport pythonProgramWidgetLogic from \"./python-program\";\nimport radioWidgetLogic from \"./radio\";\nimport sorterWidgetLogic from \"./sorter\";\nimport tableWidgetLogic from \"./table\";\nimport videoWidgetLogic from \"./video\";\n\nimport type {\n PublicWidgetOptionsFunction,\n WidgetLogic,\n} from \"./logic-export.types\";\nimport type {Alignment} from \"../types\";\n\nconst widgets = {};\n\nfunction registerWidget(type: string, logic: WidgetLogic) {\n widgets[type] = logic;\n}\n\nexport function isWidgetRegistered(type: string) {\n const widgetLogic = widgets[type];\n return !!widgetLogic;\n}\n\nexport function getCurrentVersion(type: string) {\n const widgetLogic = widgets[type];\n return widgetLogic?.version || {major: 0, minor: 0};\n}\n\n// TODO(LEMS-2870): getPublicWidgetOptionsFunction/PublicWidgetOptionsFunction\n// need better types\nexport const getPublicWidgetOptionsFunction = (\n name: string,\n): PublicWidgetOptionsFunction => {\n return widgets[name]?.getPublicWidgetOptions ?? ((i: any) => i);\n};\n\nexport function getWidgetOptionsUpgrades(type: string) {\n const widgetLogic = widgets[type];\n return widgetLogic?.widgetOptionsUpgrades || {};\n}\n\nexport function getDefaultWidgetOptions(type: string) {\n const widgetLogic = widgets[type];\n return widgetLogic?.defaultWidgetOptions || {};\n}\n\n/**\n * Handling for the optional alignments for widgets\n * See widget-container.jsx for details on how alignments are implemented.\n */\n\n/**\n * Returns the list of supported alignments for the given (string) widget\n * type. This is used primarily at editing time to display the choices\n * for the user.\n *\n * Supported alignments are given as an array of strings in the exports of\n * a widget's module.\n */\nexport const getSupportedAlignments = (\n type: string,\n): ReadonlyArray<Alignment> => {\n const widgetLogic = widgets[type];\n if (!widgetLogic?.supportedAlignments?.[0]) {\n // default alignments\n return [\"default\"];\n }\n return widgetLogic?.supportedAlignments;\n};\n\n/**\n * For the given (string) widget type, determine the default alignment for\n * the widget. This is used at rendering time to go from \"default\" alignment\n * to the actual alignment displayed on the screen.\n *\n * The default alignment is given either as a string (called\n * `defaultAlignment`) or a function (called `getDefaultAlignment`) on\n * the exports of a widget's module.\n */\nexport const getDefaultAlignment = (type: string): Alignment => {\n const widgetLogic = widgets[type];\n if (!widgetLogic?.defaultAlignment) {\n return \"block\";\n }\n return widgetLogic.defaultAlignment;\n};\n\nregisterWidget(\"categorizer\", categorizerWidgetLogic);\nregisterWidget(\"cs-program\", csProgramWidgetLogic);\nregisterWidget(\"definition\", definitionWidgetLogic);\nregisterWidget(\"dropdown\", dropdownWidgetLogic);\nregisterWidget(\"explanation\", explanationWidgetLogic);\nregisterWidget(\"expression\", expressionWidgetLogic);\nregisterWidget(\"graded-group\", gradedGroupWidgetLogic);\nregisterWidget(\"graded-group-set\", gradedGroupSetWidgetLogic);\nregisterWidget(\"grapher\", grapherWidgetLogic);\nregisterWidget(\"group\", groupWidgetLogic);\nregisterWidget(\"iframe\", iframeWidgetLogic);\nregisterWidget(\"image\", imageWidgetLogic);\nregisterWidget(\"input-number\", inputNumberWidgetLogic);\nregisterWidget(\"interaction\", interactionWidgetLogic);\nregisterWidget(\"interactive-graph\", interactiveGraphWidgetLogic);\nregisterWidget(\"label-image\", labelImageWidgetLogic);\nregisterWidget(\"matcher\", matcherWidgetLogic);\nregisterWidget(\"matrix\", matrixWidgetLogic);\nregisterWidget(\"measurer\", measurerWidgetLogic);\nregisterWidget(\"number-line\", numberLineWidgetLogic);\nregisterWidget(\"numeric-input\", numericInputWidgetLogic);\nregisterWidget(\"orderer\", ordererWidgetLogic);\nregisterWidget(\"passage\", passageWidgetLogic);\nregisterWidget(\"passage-ref\", passageRefWidgetLogic);\nregisterWidget(\"passage-ref-target\", passageRefTargetWidgetLogic);\nregisterWidget(\"phet-simulation\", phetSimulationWidgetLogic);\nregisterWidget(\"plotter\", plotterWidgetLogic);\nregisterWidget(\"python-program\", pythonProgramWidgetLogic);\nregisterWidget(\"radio\", radioWidgetLogic);\nregisterWidget(\"sorter\", sorterWidgetLogic);\nregisterWidget(\"table\", tableWidgetLogic);\nregisterWidget(\"video\", videoWidgetLogic);\n","import _ from \"underscore\";\n\nimport {Errors} from \"../error/errors\";\nimport {PerseusError} from \"../error/perseus-error\";\nimport {mapObject} from \"../utils/objective_\";\n\nimport {\n getCurrentVersion,\n getDefaultWidgetOptions,\n getSupportedAlignments,\n getWidgetOptionsUpgrades,\n isWidgetRegistered,\n} from \"./core-widget-registry\";\n\nimport type {PerseusWidget, PerseusWidgetsMap} from \"../data-schema\";\n\nconst DEFAULT_STATIC = false;\n\nexport const upgradeWidgetInfoToLatestVersion = (\n oldWidgetInfo: PerseusWidget,\n): PerseusWidget => {\n const type = oldWidgetInfo.type;\n // NOTE(jeremy): This looks like it could be replaced by fixing types so\n // that `type` is non-optional. But we're seeing this in Sentry today so I\n // suspect we have legacy data (potentially unpublished) and we should\n // figure that out before depending solely on types.\n if (!_.isString(type)) {\n throw new PerseusError(\n \"widget type must be a string, but was: \" + type,\n Errors.Internal,\n );\n }\n\n if (!isWidgetRegistered(type)) {\n // If we have a widget that isn't registered, we can't upgrade it\n // TODO(aria): Figure out what the best thing to do here would be\n return oldWidgetInfo;\n }\n\n // Unversioned widgets (pre-July 2014) are all implicitly 0.0\n const initialVersion = oldWidgetInfo.version || {major: 0, minor: 0};\n const latestVersion = getCurrentVersion(type);\n\n // If the widget version is later than what we understand (major\n // version is higher than latest, or major versions are equal and minor\n // version is higher than latest), don't perform any upgrades.\n if (\n initialVersion.major > latestVersion.major ||\n (initialVersion.major === latestVersion.major &&\n initialVersion.minor > latestVersion.minor)\n ) {\n return oldWidgetInfo;\n }\n\n // We do a clone here so that it's safe to mutate the input parameter\n // in propUpgrades functions (which I will probably accidentally do at\n // some point, and we would like to not break when that happens).\n let newEditorOptions = _.clone(oldWidgetInfo.options) || {};\n\n const upgradePropsMap = getWidgetOptionsUpgrades(type);\n\n // Empty props usually mean a newly created widget by the editor,\n // and are always considerered up-to-date.\n // Mostly, we'd rather not run upgrade functions on props that are\n // not complete.\n if (_.keys(newEditorOptions).length !== 0) {\n // We loop through all the versions after the current version of\n // the loaded widget, up to and including the latest version of the\n // loaded widget, and run the upgrade function to bring our loaded\n // widget's props up to that version.\n // There is a little subtlety here in that we call\n // upgradePropsMap[1] to upgrade *to* version 1,\n // (not from version 1).\n for (\n let nextVersion = initialVersion.major + 1;\n nextVersion <= latestVersion.major;\n nextVersion++\n ) {\n if (upgradePropsMap[String(nextVersion)]) {\n newEditorOptions =\n upgradePropsMap[String(nextVersion)](newEditorOptions);\n } else {\n throw new PerseusError(\n \"No upgrade found for widget. Cannot render.\",\n Errors.Internal,\n {\n metadata: {\n type,\n fromMajorVersion: nextVersion - 1,\n toMajorVersion: nextVersion,\n oldWidgetInfo: JSON.stringify(oldWidgetInfo),\n },\n },\n );\n }\n }\n }\n\n // Minor version upgrades (eg. new optional props) don't have\n // transform functions. Instead, we fill in the new props with their\n // defaults.\n const defaultOptions = getDefaultWidgetOptions(type);\n newEditorOptions = {\n ...defaultOptions,\n ...newEditorOptions,\n };\n\n let alignment = oldWidgetInfo.alignment;\n\n // Widgets that support multiple alignments will \"lock in\" the\n // alignment to the alignment that would be listed first in the\n // select box. If the widget only supports one alignment, the\n // alignment value will likely just end up as \"default\".\n if (alignment == null || alignment === \"default\") {\n alignment = getSupportedAlignments(type)?.[0];\n if (!alignment) {\n throw new PerseusError(\n \"No default alignment found when upgrading widget\",\n Errors.Internal,\n {metadata: {widgetType: type}},\n );\n }\n }\n\n let widgetStatic = oldWidgetInfo.static;\n\n if (widgetStatic == null) {\n widgetStatic = DEFAULT_STATIC;\n }\n\n return {\n ...oldWidgetInfo,\n // maintain other info, like type\n // After upgrading we guarantee that the version is up-to-date\n version: latestVersion,\n // Default graded to true (so null/undefined becomes true):\n graded: oldWidgetInfo.graded != null ? oldWidgetInfo.graded : true,\n alignment: alignment,\n static: widgetStatic,\n options: newEditorOptions,\n } as any;\n};\n\nexport function getUpgradedWidgetOptions(\n oldWidgetOptions: PerseusWidgetsMap,\n): PerseusWidgetsMap {\n return mapObject(oldWidgetOptions, (widgetInfo, widgetId) => {\n if (!widgetInfo.type || !widgetInfo.alignment) {\n const newValues: Record<string, any> = {};\n\n if (!widgetInfo.type) {\n // TODO: why does widget have no type?\n // We don't want to derive type from widget ID\n // see: LEMS-1845\n newValues.type = widgetId.split(\" \")[0];\n }\n\n if (!widgetInfo.alignment) {\n newValues.alignment = \"default\";\n }\n\n widgetInfo = {...widgetInfo, ...newValues};\n }\n\n return upgradeWidgetInfoToLatestVersion(widgetInfo) as any;\n });\n}\n","import _ from \"underscore\";\n\nimport {getPublicWidgetOptionsFunction} from \"../widgets/core-widget-registry\";\nimport {getUpgradedWidgetOptions} from \"../widgets/upgrade\";\n\nimport type {PerseusRenderer} from \"../data-schema\";\n\nexport default function splitPerseusItem(\n originalItem: PerseusRenderer,\n): PerseusRenderer {\n const item = _.clone(originalItem);\n const originalWidgets = item.widgets ?? {};\n\n const upgradedWidgets = getUpgradedWidgetOptions(originalWidgets);\n const splitWidgets = {};\n\n for (const [id, widget] of Object.entries(upgradedWidgets)) {\n const publicWidgetOptionsFun = getPublicWidgetOptionsFunction(\n widget.type,\n );\n\n splitWidgets[id] = {\n ...widget,\n options: publicWidgetOptionsFun(widget.options as any),\n };\n }\n\n return {\n ...item,\n widgets: splitWidgets,\n };\n}\n","/* Note(tamara): Brought over from the perseus package packages/perseus/src/util.ts file.\n May be useful to bring other perseus package utilities here. Contains utility functions\n and types used across multiple widgets for randomization and shuffling. */\n\nimport _ from \"underscore\";\n\ntype RNG = () => number;\n\nexport const seededRNG: (seed: number) => RNG = function (seed: number): RNG {\n let randomSeed = seed;\n\n return function () {\n // Robert Jenkins' 32 bit integer hash function.\n let seed = randomSeed;\n seed = (seed + 0x7ed55d16 + (seed << 12)) & 0xffffffff;\n seed = (seed ^ 0xc761c23c ^ (seed >>> 19)) & 0xffffffff;\n seed = (seed + 0x165667b1 + (seed << 5)) & 0xffffffff;\n seed = ((seed + 0xd3a2646c) ^ (seed << 9)) & 0xffffffff;\n seed = (seed + 0xfd7046c5 + (seed << 3)) & 0xffffffff;\n seed = (seed ^ 0xb55a4f09 ^ (seed >>> 16)) & 0xffffffff;\n return (randomSeed = seed & 0xfffffff) / 0x10000000;\n };\n};\n\n// Shuffle an array using a given random seed or function.\n// If `ensurePermuted` is true, the input and output are guaranteed to be\n// distinct permutations.\nexport function shuffle<T>(\n array: ReadonlyArray<T>,\n randomSeed: number | RNG,\n ensurePermuted = false,\n): ReadonlyArray<T> {\n // Always return a copy of the input array\n const shuffled = _.clone(array);\n\n // Handle edge cases (input array is empty or uniform)\n if (\n !shuffled.length ||\n _.all(shuffled, function (value) {\n return _.isEqual(value, shuffled[0]);\n })\n ) {\n return shuffled;\n }\n\n let random;\n if (typeof randomSeed === \"function\") {\n random = randomSeed;\n } else {\n random = seededRNG(randomSeed);\n }\n\n do {\n // Fischer-Yates shuffle\n for (let top = shuffled.length; top > 0; top--) {\n const newEnd = Math.floor(random() * top);\n const temp = shuffled[newEnd];\n\n // @ts-expect-error - TS2542 - Index signature in type 'readonly T[]' only permits reading.\n shuffled[newEnd] = shuffled[top - 1];\n // @ts-expect-error - TS2542 - Index signature in type 'readonly T[]' only permits reading.\n shuffled[top - 1] = temp;\n }\n } while (ensurePermuted && _.isEqual(array, shuffled));\n\n return shuffled;\n}\n\nexport const random: RNG = seededRNG(new Date().getTime() & 0xffffffff);\n"],"names":["addLibraryVersionToPerseusDebug","libraryName","libraryVersion","prefix","formattedVersion","globalThis","__perseus_debug__","existingVersionEntry","allVersions","Array","isArray","push","console","warn","sort","join","isObject","isFunction","has","isFinite","isNaN","constant","isDataView","isArguments","_","isTypedArray","toPath","_has","mapObject","random","flatten","pluck","shuffle","_flatten","object","getMatrixSize","matrix","matrixSize","each","matrixRow","row","rowWidth","matrixCol","col","toString","length","Math","max","getDecimalSeparator","locale","numberWithDecimalSeparator","match","Intl","NumberFormat","format","approximateEqual","x","y","abs","approximateDeepEqual","i","all","v","k","addWidget","id","getWidgetRegex","getWidgetIdsFromContent","content","widgets","localWidgetRegex","exec","getWidgetIdsFromContentByType","type","widgetMap","rv","widgetIdsInContent","forEach","widgetId","widget","deepClone","obj","map","MOVABLES","PLOT","PARABOLA","SINUSOID","canonicalSineCoefficients","coeffs","amplitude","angularFrequency","phase","verticalOffset","period","PI","canonicalTangentCoefficients","PlotDefaults","areEqual","coeffs1","coeffs2","movable","getPropsForCoeffs","fn","partial","getFunctionForCoeffs","Linear","extend","url","defaultCoords","getCoefficients","coords","p1","p2","denom","num","m","b","getEquationString","toFixed","Quadratic","h","a","c","Sinusoid","d","sin","Tangent","tan","Exponential","defaultAsymptote","extraCoordConstraint","newCoord","oldCoord","asymptote","graph","coord","extraAsymptoteConstraint","isValid","oldY","wasBelow","bottomMost","min","snapStep","topMost","allowReflectOverAsymptote","log","exp","Logarithm","oldX","wasLeft","leftMost","rightMost","flip","inverseCoeffs","AbsoluteValue","horizontalOffset","functionTypeMapping","linear","quadratic","sinusoid","tangent","exponential","logarithm","absolute_value","allTypes","keys","functionForType","isRealJSONParse","jsonParse","randomPhrase","buildRandomPhrase","randomHintPhrase","randomString","buildRandomString","testingObject","JSON","stringify","answerArea","calculator","chi2Table","financialCalculatorMonthlyPayment","financialCalculatorTimeToPayOff","financialCalculatorTotalAmount","periodicTable","periodicTableWithKey","tTable","zTable","hints","floor","itemDataVersion","major","minor","question","images","expression1","alignment","graded","options","answerForms","considered","form","key","simplify","value","ariaLabel","buttonSets","functions","static","times","visibleLabel","version","testJSON","buildTestData","replace","parsedTestJSON","parsedTestItemData","data","assessmentItem","item","itemData","capitalize","arguments","undefined","randomLength","randomLetter","String","fromCharCode","toUpperCase","phrases","modifierStart","modifierEnd","modifierIndex","testObject","success","failure","detail","isFailure","result","isSuccess","results","combineFailureDetails","values","failureDetails","reduce","ErrorTrackingParseContext","constructor","path","expected","badValue","wrapInArray","forSubtree","formatPath","formatPathSegment","segment","validIdentifier","test","message","conjoin","items","allButLast","slice","last","parse","parser","any","rawValue","ctx","array","elementParser","elementResults","elem","Result","concat","boolean","acceptedValue","enumeration","_len","acceptedValues","_key","index","indexOf","Object","getPrototypeOf","prototype","nullable","parseValue","number","schema","ret","mismatches","prop","propParser","entries","optional","pair","parseA","parseB","rawA","rawB","resultA","resultB","pipeParsers","p","ParserPipeline","then","nextParser","composeParsers","parserA","parserB","partialResult","record","parseKey","entryCtx","keyResult","valueResult","string","trio","parseC","resultC","union","parseBranch","UnionBuilder","or","newBranch","either","defaulted","fallback","parseImages","width","height","parseWidget","parseType","parseOptions","parseWidgetWithVersion","parseVersion","parseCategorizerWidget","categories","randomizeItems","highlightLint","linterContext","contentType","paths","stack","parseCSProgramWidget","programID","programType","settings","name","showEditor","showButtons","parseDefinitionWidget","togglePrompt","definition","parseDropdownWidget","placeholder","choices","correct","parseExplanationWidget","showPrompt","hidePrompt","explanation","rawVal","parseWidgetsMap","convert","f","parseLegacyButtonSet","parseLegacyButtonSets","versionedWidgetOptions","latestMajorVersion","parseLatest","VersionedWidgetOptionsParserBuilder","latest","raw","majorVersion","parseThisVersion","migrateToLatest","parseOtherVersions","parseThisVersionAndMigrateToLatest","versionParseResult","parseVersionedObject","withMigrationFrom","parseOldVersion","migrateToNextVersion","old","stringOrNumberOrNullOrUndefined","parsePossiblyInvalidAnswerForm","removeInvalidAnswerForms","possiblyInvalid","valid","answerForm","version1","parseExpressionWidgetV1","buttonsVisible","version0","parseExpressionWidgetV0","migrateV0ToV1","parseExpressionWidget","falseToNull","parseGradedGroupWidgetOptions","title","hasHint","hint","parsePerseusRenderer","widgetEnabled","immutableWidgets","parseGradedGroupWidget","parseGradedGroupSetWidget","gradedGroups","discriminatedUnionOn","discriminantKey","noMoreBranches","DiscriminatedUnionBuilder","withBranch","discriminantValue","parseNewVariant","parseNewBranch","discriminatedUnionBranch","parseVariant","parseOtherBranches","pairOfNumbers","pairOfPoints","parseGrapherWidget","availableTypes","backgroundImage","bottom","left","scale","box","editableSettings","gridStep","labels","markings","range","rulerLabel","rulerTicks","showProtractor","showRuler","showTooltips","step","parseGroupWidget","parseIframeWidget","allowFullScreen","allowTopNavigation","stringToNumber","parsedNumber","emptyToZero","imageDimensionToNumber","dimensionOrUndefined","parsePerseusImageBackground","top","parseImageWidget","caption","alt","coordinates","booleanToString","parseInputNumberWidget","answerType","inexact","maxError","rightAlign","size","customKeypad","stringOrEmpty","parseFunctionElement","funcName","rangeMin","rangeMax","color","strokeDasharray","strokeWidth","parseLabelElement","label","coordX","coordY","parseLineElement","startX","startY","endX","endY","arrows","parseMovableLineElement","startSubscript","endSubscript","constraint","snap","constraintFn","constraintXMin","constraintXMax","constraintYMin","constraintYMax","parseMovablePointElement","varSubscript","parseParametricElement","parsePointElement","parseRectangleElement","parseInteractionWidget","tickStep","elements","ItemExtras","PerseusExpressionAnswerFormConsidered","lockedFigureColorNames","lockedFigureColors","blue","green","grayH","purple","pink","red","orange","lockedFigureFillStyles","none","white","translucent","solid","plotterPlotTypes","parsePerseusGraphTypeAngle","showAngles","allowReflexAngles","angleOffsetDeg","snapDegrees","startCoords","parsePerseusGraphTypeCircle","center","radius","parsePerseusGraphTypeLinear","parsePerseusGraphTypeLinearSystem","parsePerseusGraphTypeNone","parsePerseusGraphTypePoint","numPoints","parsePerseusGraphTypePolygon","numSides","showSides","snapTo","parsePerseusGraphTypeQuadratic","parsePerseusGraphTypeRay","parsePerseusGraphTypeSegment","numSegments","parsePerseusGraphTypeSinusoid","parsePerseusGraphType","parseLockedFigureColor","parseLockedFigureFillType","parseLockedLineStyle","parseLockedLabelType","text","parseLockedPointType","filled","parseLockedLineType","kind","points","lineStyle","showPoint1","showPoint2","parseLockedVectorType","parseLockedEllipseType","angle","fillStyle","strokeStyle","parseLockedPolygonType","showVertices","parseLockedFunctionType","equation","directionalAxis","domain","parseLockedFigure","parseInteractiveGraphWidget","lockedFigures","fullGraphLabel","fullGraphAriaDescription","parseLabelImageWidget","imageUrl","imageAlt","imageHeight","imageWidth","markers","answers","hideChoicesFromInstructions","multipleAnswers","parseMatcherWidget","right","orderMatters","padding","numberOrString","numeric","NaN","parseMatrixWidget","suffix","cursorPosition","matrixBoardSize","parseMeasurerWidget","image","rulerPixels","rulerLength","parseMoleculeRendererWidget","rotationAngle","smiles","emptyStringToNull","parseNumberLineWidget","labelRange","labelStyle","labelTicks","isTickCtrl","divisionRange","numDivisions","snapDivisions","correctRel","correctX","initialX","parseMathFormat","parseNumericInputWidget","status","strict","labelText","coefficient","parseRenderer","largeToAuto","parseOrdererWidget","correctOptions","otherOptions","layout","parsePassageRefWidget","passageNumber","referenceNumber","summaryText","parsePassageWidget","footnotes","passageText","passageTitle","showLineNumbers","parsePhetSimulationWidget","description","parsePlotterWidget","maxY","scaleY","labelInterval","snapsPerLine","starting","picUrl","picSize","picBoxHeight","plotDimensions","parsePythonProgramWidget","parseRadioWidget","clue","isNoneOfTheAbove","hasNoneOfTheAbove","countChoices","randomize","multipleSelect","deselectEnabled","onePerLine","displayCount","noneOfTheAbove","parseSorterWidget","parseTableWidget","headers","rows","columns","parseVideoWidget","location","widgetsMap","entryResult","parseWidgetsMapEntry","_ref","idComponentsResult","parseWidgetIdComponents","split","n","parseAndAssign","widgetResult","parseDeprecatedWidget","parseStringToNonNegativeInt","metadata","parsePerseusArticle","parseHint","parsePerseusAnswerArea","toAnswerArea","parsePerseusItem","answer","json","Error","parseAndMigratePerseusItem","throwErrorIfCheatingDetected","migrateAndTypecheckPerseusItem","invalidObject","parseAndMigratePerseusArticle","migrateAndTypecheckPerseusArticle","libName","libVersion","Errors","freeze","Unknown","Internal","InvalidInput","NotAllowed","TransientService","Service","PerseusError","table","subKey","lambda","getCategorizerPublicWidgetOptions","defaultWidgetOptions","categorizerWidgetLogic","getPublicWidgetOptions","getCSProgramPublicWidgetOptions","DEFAULT_HEIGHT","csProgramWidgetLogic","supportedAlignments","definitionWidgetLogic","defaultAlignment","getDropdownPublicWidgetOptions","choice","dropdownWidgetLogic","explanationWidgetLogic","currentVersion","widgetOptionsUpgrades","v0options","getExpressionPublicWidgetOptions","expressionWidgetLogic","gradedGroupWidgetLogic","gradedGroupSetWidgetLogic","getGrapherPublicWidgetOptions","publicOptions","grapherWidgetLogic","groupWidgetLogic","getIFramePublicWidgetOptions","iframeWidgetLogic","imageWidgetLogic","inputNumberWidgetLogic","interactionWidgetLogic","getInteractiveGraphPublicWidgetOptions","interactiveGraphWidgetLogic","getLabelImagePublicWidgetOptions","getLabelImageMarkerPublicData","marker","publicData","labelImageWidgetLogic","shuffleMatcher","props","rng","seededRNG","problemNum","shuffleMatcherWithRandom","getMatcherPublicWidgetOptions","matcherWidgetLogic","getMatrixPublicWidgetOptions","matrixWidgetLogic","imageTop","imageLeft","rest","measurerWidgetLogic","getNumberLinePublicWidgetOptions","__","numberLineWidgetLogic","getNumericInputPublicWidgetOptions","publicWidgetOptions","numericInputWidgetLogic","getOrdererPublicWidgetOptions","ordererWidgetLogic","passageWidgetLogic","passageRefWidgetLogic","passageRefTargetWidgetLogic","phetSimulationWidgetLogic","getPlotterPublicWidgetOptions","plotterWidgetLogic","pythonProgramWidgetLogic","v0props","getRadioChoicePublicData","getRadioPublicWidgetOptions","radioWidgetLogic","getSorterPublicWidgetOptions","shuffledCorrect","isCorrectShuffled","sorterWidgetLogic","getTablePublicWidgetOptions","defaultRows","defaultColumns","fill","tableWidgetLogic","videoWidgetLogic","registerWidget","logic","isWidgetRegistered","widgetLogic","getCurrentVersion","getPublicWidgetOptionsFunction","getWidgetOptionsUpgrades","getDefaultWidgetOptions","getSupportedAlignments","getDefaultAlignment","DEFAULT_STATIC","upgradeWidgetInfoToLatestVersion","oldWidgetInfo","isString","initialVersion","latestVersion","newEditorOptions","clone","upgradePropsMap","nextVersion","fromMajorVersion","toMajorVersion","defaultOptions","widgetType","widgetStatic","getUpgradedWidgetOptions","oldWidgetOptions","widgetInfo","newValues","splitPerseusItem","originalItem","originalWidgets","upgradedWidgets","splitWidgets","publicWidgetOptionsFun","seed","randomSeed","ensurePermuted","shuffled","isEqual","newEnd","temp","Date","getTime"],"mappings":"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D,iBAAiB,CAAC,CACtC1D,UAAU,CAAC,MAAM,EAAE8D,gBAAgB,CAAC,CACpC9D,UAAU,CAAC,cAAc,EAAEoE,uBAAuB,CAAC,CACnDpE,UAAU,CAAC,eAAe,EAAE8E,wBAAwB,CAAC,CACrD9E,UAAU,CAAC,YAAY,EAAEgF,sBAAsB,CAAC,CAChDhF,UAAU,CAAC,OAAO,EAAEiF,iBAAiB,CAAC,CACtCjF,UAAU,CAAC,WAAW,EAAEkF,qBAAqB,CAAC,CAACvO,MACxD,CAAA;AACJ,CAAC,CACL,CAAC;;ACjMD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAI6B;;AAM7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AA2CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAmBA;AACA;AACA;AACA;;AAwDO,MAAM2O,UAAU,GAAG;AACtB;AACA,YAAY;AACZ;AACA,WAAW;AACX;AACA,mCAAmC;AACnC;AACA,gCAAgC;AAChC;AACA,iCAAiC;AACjC;AACA,eAAe;AACf;AACA,sBAAsB;AACtB;AACA,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"}
1
+ {"version":3,"file":"index.js","sources":["../src/utils/get-matrix-size.ts","../src/utils/get-decimal-separator.ts","../src/utils/equality.ts","../src/utils/widget-id-utils.ts","../src/utils/deep-clone.ts","../src/utils/grapher-util.ts","../src/utils/is-real-json-parse.ts","../../../node_modules/.pnpm/tiny-invariant@1.3.3/node_modules/tiny-invariant/dist/esm/tiny-invariant.js","../src/parse-perseus-json/result.ts","../src/parse-perseus-json/error-tracking-parse-context.ts","../src/parse-perseus-json/object-path.ts","../src/parse-perseus-json/parse-failure-detail.ts","../src/parse-perseus-json/parse.ts","../src/parse-perseus-json/general-purpose-parsers/any.ts","../src/parse-perseus-json/general-purpose-parsers/array.ts","../src/parse-perseus-json/general-purpose-parsers/boolean.ts","../src/parse-perseus-json/general-purpose-parsers/constant.ts","../src/parse-perseus-json/general-purpose-parsers/enumeration.ts","../src/parse-perseus-json/general-purpose-parsers/is-object.ts","../src/parse-perseus-json/general-purpose-parsers/nullable.ts","../src/parse-perseus-json/general-purpose-parsers/number.ts","../src/parse-perseus-json/general-purpose-parsers/object.ts","../src/parse-perseus-json/general-purpose-parsers/optional.ts","../src/parse-perseus-json/general-purpose-parsers/pair.ts","../src/parse-perseus-json/general-purpose-parsers/pipe-parsers.ts","../src/parse-perseus-json/general-purpose-parsers/record.ts","../src/parse-perseus-json/general-purpose-parsers/string.ts","../src/parse-perseus-json/general-purpose-parsers/trio.ts","../src/parse-perseus-json/general-purpose-parsers/union.ts","../src/parse-perseus-json/general-purpose-parsers/defaulted.ts","../src/parse-perseus-json/perseus-parsers/images-map.ts","../src/parse-perseus-json/perseus-parsers/widget.ts","../src/parse-perseus-json/perseus-parsers/categorizer-widget.ts","../src/parse-perseus-json/perseus-parsers/cs-program-widget.ts","../src/parse-perseus-json/perseus-parsers/definition-widget.ts","../src/parse-perseus-json/perseus-parsers/dropdown-widget.ts","../src/parse-perseus-json/perseus-parsers/explanation-widget.ts","../src/parse-perseus-json/general-purpose-parsers/convert.ts","../src/parse-perseus-json/perseus-parsers/legacy-button-sets.ts","../src/parse-perseus-json/perseus-parsers/versioned-widget-options.ts","../src/parse-perseus-json/perseus-parsers/expression-widget.ts","../src/parse-perseus-json/perseus-parsers/graded-group-widget.ts","../src/parse-perseus-json/perseus-parsers/graded-group-set-widget.ts","../src/parse-perseus-json/general-purpose-parsers/discriminated-union.ts","../src/parse-perseus-json/perseus-parsers/grapher-widget.ts","../src/parse-perseus-json/perseus-parsers/group-widget.ts","../src/parse-perseus-json/perseus-parsers/iframe-widget.ts","../src/parse-perseus-json/general-purpose-parsers/string-to-number.ts","../src/parse-perseus-json/perseus-parsers/perseus-image-background.ts","../src/parse-perseus-json/perseus-parsers/image-widget.ts","../src/parse-perseus-json/perseus-parsers/input-number-widget.ts","../src/parse-perseus-json/perseus-parsers/interaction-widget.ts","../src/data-schema.ts","../src/parse-perseus-json/perseus-parsers/interactive-graph-widget.ts","../src/parse-perseus-json/perseus-parsers/label-image-widget.ts","../src/parse-perseus-json/perseus-parsers/matcher-widget.ts","../src/parse-perseus-json/perseus-parsers/matrix-widget.ts","../src/parse-perseus-json/perseus-parsers/measurer-widget.ts","../src/parse-perseus-json/perseus-parsers/molecule-renderer-widget.ts","../src/parse-perseus-json/perseus-parsers/number-line-widget.ts","../src/parse-perseus-json/perseus-parsers/numeric-input-widget.ts","../src/parse-perseus-json/perseus-parsers/orderer-widget.ts","../src/parse-perseus-json/perseus-parsers/passage-ref-widget.ts","../src/parse-perseus-json/perseus-parsers/passage-widget.ts","../src/parse-perseus-json/perseus-parsers/phet-simulation-widget.ts","../src/parse-perseus-json/perseus-parsers/plotter-widget.ts","../src/parse-perseus-json/perseus-parsers/python-program-widget.ts","../src/parse-perseus-json/perseus-parsers/radio-widget.ts","../src/parse-perseus-json/perseus-parsers/sorter-widget.ts","../src/parse-perseus-json/perseus-parsers/table-widget.ts","../src/parse-perseus-json/perseus-parsers/video-widget.ts","../src/parse-perseus-json/perseus-parsers/widgets-map.ts","../src/parse-perseus-json/perseus-parsers/perseus-renderer.ts","../src/parse-perseus-json/perseus-parsers/perseus-article.ts","../src/parse-perseus-json/perseus-parsers/hint.ts","../src/parse-perseus-json/perseus-parsers/perseus-answer-area.ts","../src/parse-perseus-json/perseus-parsers/perseus-item.ts","../src/parse-perseus-json/index.ts","../../../utils/shared/add-library-version-to-perseus-debug.ts","../src/version.ts","../src/error/errors.ts","../src/error/perseus-error.ts","../src/utils/objective_.ts","../src/widgets/categorizer/categorizer-util.ts","../src/widgets/categorizer/index.ts","../src/widgets/cs-program/cs-program-util.ts","../src/widgets/cs-program/index.ts","../src/widgets/definition/index.ts","../src/widgets/dropdown/dropdown-util.ts","../src/widgets/dropdown/index.ts","../src/widgets/explanation/index.ts","../src/widgets/expression/expression-upgrade.ts","../src/widgets/expression/expression-util.ts","../src/widgets/expression/index.ts","../src/widgets/graded-group/index.ts","../src/widgets/graded-group-set/index.ts","../src/widgets/grapher/grapher-util.ts","../src/widgets/grapher/index.ts","../src/widgets/group/index.ts","../src/widgets/iframe/iframe-util.ts","../src/widgets/iframe/index.ts","../src/widgets/image/index.ts","../src/widgets/input-number/index.ts","../src/widgets/interaction/index.ts","../src/widgets/interactive-graph/interactive-graph-util.ts","../src/widgets/interactive-graph/index.ts","../src/widgets/label-image/label-image-util.ts","../src/widgets/label-image/index.ts","../src/widgets/matcher/matcher-util.ts","../src/widgets/matcher/index.ts","../src/widgets/matrix/matrix-util.ts","../src/widgets/matrix/index.ts","../src/widgets/measurer/measurer-upgrade.ts","../src/widgets/measurer/index.ts","../src/widgets/number-line/number-line-util.ts","../src/widgets/number-line/index.ts","../src/widgets/numeric-input/numeric-input-util.ts","../src/widgets/numeric-input/index.ts","../src/widgets/orderer/orderer-util.ts","../src/widgets/orderer/index.ts","../src/widgets/passage/index.ts","../src/widgets/passage-ref/passage-ref-upgrade.ts","../src/widgets/passage-ref/index.ts","../src/widgets/passage-ref-target/index.ts","../src/widgets/phet-simulation/index.ts","../src/widgets/plotter/plotter-util.ts","../src/widgets/plotter/index.ts","../src/widgets/python-program/index.ts","../src/widgets/radio/radio-upgrade.ts","../src/widgets/radio/radio-util.ts","../src/widgets/radio/index.ts","../src/widgets/sorter/sorter-util.ts","../src/widgets/sorter/index.ts","../src/widgets/table/table-util.ts","../src/widgets/table/index.ts","../src/widgets/video/index.ts","../src/widgets/core-widget-registry.ts","../src/widgets/upgrade.ts","../src/utils/split-perseus-item.ts","../src/utils/random-util.ts"],"sourcesContent":["import _ from \"underscore\";\n\nfunction getMatrixSize(matrix: ReadonlyArray<ReadonlyArray<number>>) {\n const matrixSize = [1, 1];\n\n // We need to find the widest row and tallest column to get the correct\n // matrix size.\n _(matrix).each((matrixRow, row) => {\n let rowWidth = 0;\n _(matrixRow).each((matrixCol, col) => {\n if (matrixCol != null && matrixCol.toString().length) {\n rowWidth = col + 1;\n }\n });\n\n // Matrix width:\n matrixSize[1] = Math.max(matrixSize[1], rowWidth);\n\n // Matrix height:\n if (rowWidth > 0) {\n matrixSize[0] = Math.max(matrixSize[0], row + 1);\n }\n });\n return matrixSize;\n}\n\nexport default getMatrixSize;\n","/**\n * Get the character used for separating decimals.\n */\nconst getDecimalSeparator = (locale: string): string => {\n switch (locale) {\n // TODO(somewhatabstract): Remove this when Chrome supports the `ka`\n // locale properly.\n // https://github.com/formatjs/formatjs/issues/1526#issuecomment-559891201\n //\n // Supported locales in Chrome:\n // https://source.chromium.org/chromium/chromium/src/+/master:third_party/icu/scripts/chrome_ui_languages.list\n case \"ka\":\n return \",\";\n\n default:\n const numberWithDecimalSeparator = 1.1;\n // TODO(FEI-3647): Update to use .formatToParts() once we no longer have to\n // support Safari 12.\n const match = new Intl.NumberFormat(locale)\n .format(numberWithDecimalSeparator)\n // 0x661 is ARABIC-INDIC DIGIT ONE\n // 0x6F1 is EXTENDED ARABIC-INDIC DIGIT ONE\n // 0x967 is DEVANAGARI DIGIT ONE\n // 0x9e7 is BENGALI/BANGLA DIGIT ONE\n .match(/[^\\d\\u0661\\u06F1\\u0967\\u09e7]/);\n return match?.[0] ?? \".\";\n }\n};\n\nexport default getDecimalSeparator;\n","import _ from \"underscore\";\n\n/**\n * APPROXIMATE equality on numbers and primitives.\n */\nexport function approximateEqual<T>(x: T, y: T): boolean {\n if (typeof x === \"number\" && typeof y === \"number\") {\n return Math.abs(x - y) < 1e-9;\n }\n return x === y;\n}\n\n/**\n * Deep APPROXIMATE equality on primitives, numbers, arrays, and objects.\n * Recursive.\n */\nexport function approximateDeepEqual<T>(x: T, y: T): boolean {\n if (Array.isArray(x) && Array.isArray(y)) {\n if (x.length !== y.length) {\n return false;\n }\n for (let i = 0; i < x.length; i++) {\n if (!approximateDeepEqual(x[i], y[i])) {\n return false;\n }\n }\n return true;\n }\n if (Array.isArray(x) || Array.isArray(y)) {\n return false;\n }\n if (typeof x === \"function\" && typeof y === \"function\") {\n return approximateEqual(x, y);\n }\n if (typeof x === \"function\" || typeof y === \"function\") {\n return false;\n }\n if (typeof x === \"object\" && typeof y === \"object\" && !!x && !!y) {\n return (\n x === y ||\n (_.all(x, function (v, k) {\n // @ts-expect-error - TS2536 - Type 'CollectionKey<T>' cannot be used to index type 'T'.\n return approximateDeepEqual(y[k], v);\n }) &&\n _.all(y, function (v, k) {\n // @ts-expect-error - TS2536 - Type 'CollectionKey<T>' cannot be used to index type 'T'.\n return approximateDeepEqual(x[k], v);\n }))\n );\n }\n if ((typeof x === \"object\" && !!x) || (typeof y === \"object\" && !!y)) {\n return false;\n }\n return approximateEqual(x, y);\n}\n","import type {PerseusWidgetsMap} from \"../data-schema\";\n\n/**\n * Add a widget placeholder using the widget ID.\n * ex. addWidget(\"radio 1\") => \"[[☃ radio 1]]\"\n *\n * @param {string} id\n * @returns {string}\n */\nexport function addWidget(id: string): string {\n return `[[☃ ${id}]]`;\n}\n\n/**\n * Regex for widget placeholders in a string.\n *\n * First capture group is the widget ID (ex. 'radio 1')\n * Second capture group is the widget type (ex. \"radio)\n * exec return will look like: ['[[☃ radio 1]]', 'radio 1', 'radio']\n */\nexport function getWidgetRegex() {\n return /\\[\\[☃ ([A-Za-z0-9- ]+)\\]\\]/g;\n}\n\n/**\n * Extract all widget IDs, which includes the widget type and instance number.\n * example output: ['radio 1', 'categorizer 1', 'categorizor 2']\n *\n * Content should contain Perseus widget placeholders,\n * which look like: '[[☃ radio 1]]'.\n *\n * @param {string} content\n * @returns {ReadonlyArray<string>} widgetIds\n */\nexport function getWidgetIdsFromContent(\n content: string,\n): ReadonlyArray<string> {\n const widgets: Array<string> = [];\n const localWidgetRegex = getWidgetRegex();\n\n let match = localWidgetRegex.exec(content);\n\n while (match !== null) {\n widgets.push(match[1]);\n match = localWidgetRegex.exec(content);\n }\n\n return widgets;\n}\n\n/**\n * Get a list of widget IDs from content,\n * but only for specific widget types\n *\n * @param {string} type the type of widget (ie \"radio\")\n * @param {string} content the string to parse\n * @param {PerseusWidgetsMap} widgetMap widget ID to widget map\n * @returns {ReadonlyArray<string>} the widget type (ie \"radio\")\n */\nexport function getWidgetIdsFromContentByType(\n type: string,\n content: string,\n widgetMap: PerseusWidgetsMap,\n): ReadonlyArray<string> {\n const rv: Array<string> = [];\n const widgetIdsInContent = getWidgetIdsFromContent(content);\n widgetIdsInContent.forEach((widgetId) => {\n const widget = widgetMap[widgetId];\n if (widget?.type === type) {\n rv.push(widgetId);\n }\n });\n return rv;\n}\n","// TODO(benchristel): in the future, we may want to make deepClone work for\n// Record<string, Cloneable> as well. Currently, it only does arrays.\ntype Cloneable =\n | null\n | undefined\n | boolean\n | string\n | number\n | Cloneable[]\n | readonly Cloneable[];\nfunction deepClone<T extends Cloneable>(obj: T): T {\n if (Array.isArray(obj)) {\n return obj.map(deepClone) as T;\n }\n return obj;\n}\n\nexport default deepClone;\n","import _ from \"underscore\";\n\nimport {approximateDeepEqual} from \"./equality\";\n\nimport type {\n LinearType,\n QuadraticType,\n SinusoidType,\n TangentType,\n ExponentialType,\n LogarithmType,\n AbsoluteValueType,\n Coords,\n} from \"./grapher-types\";\nimport type {Coord} from \"../data-schema\";\n\nexport const MOVABLES = {\n PLOT: \"PLOT\",\n PARABOLA: \"PARABOLA\",\n SINUSOID: \"SINUSOID\",\n};\n\n// TODO(charlie): These really need to go into a utility file as they're being\n// used by both interactive-graph and now grapher.\nfunction canonicalSineCoefficients(coeffs: any) {\n // For a curve of the form f(x) = a * Sin(b * x - c) + d,\n // this function ensures that a, b > 0, and c is its\n // smallest possible positive value.\n let amplitude = coeffs[0];\n let angularFrequency = coeffs[1];\n let phase = coeffs[2];\n const verticalOffset = coeffs[3];\n\n // Guarantee a > 0\n if (amplitude < 0) {\n amplitude *= -1;\n angularFrequency *= -1;\n phase *= -1;\n }\n\n const period = 2 * Math.PI;\n // Guarantee b > 0\n if (angularFrequency < 0) {\n angularFrequency *= -1;\n phase *= -1;\n phase += period / 2;\n }\n\n // Guarantee c is smallest possible positive value\n while (phase > 0) {\n phase -= period;\n }\n while (phase < 0) {\n phase += period;\n }\n\n return [amplitude, angularFrequency, phase, verticalOffset];\n}\n\nfunction canonicalTangentCoefficients(coeffs: any) {\n // For a curve of the form f(x) = a * Tan(b * x - c) + d,\n // this function ensures that a, b > 0, and c is its\n // smallest possible positive value.\n let amplitude = coeffs[0];\n let angularFrequency = coeffs[1];\n let phase = coeffs[2];\n const verticalOffset = coeffs[3];\n\n // Guarantee a > 0\n if (amplitude < 0) {\n amplitude *= -1;\n angularFrequency *= -1;\n phase *= -1;\n }\n\n const period = Math.PI;\n // Guarantee b > 0\n if (angularFrequency < 0) {\n angularFrequency *= -1;\n phase *= -1;\n phase += period / 2;\n }\n\n // Guarantee c is smallest possible positive value\n while (phase > 0) {\n phase -= period;\n }\n while (phase < 0) {\n phase += period;\n }\n\n return [amplitude, angularFrequency, phase, verticalOffset];\n}\n\nconst PlotDefaults = {\n areEqual: function (\n coeffs1: ReadonlyArray<number>,\n coeffs2: ReadonlyArray<number>,\n ): boolean {\n return approximateDeepEqual(coeffs1, coeffs2);\n },\n movable: MOVABLES.PLOT,\n getPropsForCoeffs: function (coeffs: ReadonlyArray<number>): {fn: any} {\n return {\n // @ts-expect-error - TS2339 - Property 'getFunctionForCoeffs' does not exist on type '{ readonly areEqual: (coeffs1: any, coeffs2: any) => boolean; readonly Movable: any; readonly getPropsForCoeffs: (coeffs: any) => any; }'.\n fn: _.partial(this.getFunctionForCoeffs, coeffs),\n };\n },\n} as const;\n\nconst Linear: LinearType = _.extend({}, PlotDefaults, {\n url: \"https://ka-perseus-graphie.s3.amazonaws.com/67aaf581e6d9ef9038c10558a1f70ac21c11c9f8.png\",\n\n defaultCoords: [\n [0.25, 0.75],\n [0.75, 0.75],\n ],\n\n getCoefficients: function (\n coords: Coords,\n ): ReadonlyArray<number> | undefined {\n const p1 = coords[0];\n const p2 = coords[1];\n\n const denom = p2[0] - p1[0];\n const num = p2[1] - p1[1];\n\n if (denom === 0) {\n return;\n }\n\n const m = num / denom;\n const b = p2[1] - m * p2[0];\n return [m, b];\n },\n\n getFunctionForCoeffs: function (coeffs: ReadonlyArray<number>, x: number) {\n const m = coeffs[0];\n const b = coeffs[1];\n return m * x + b;\n },\n\n getEquationString: function (coords: Coords) {\n const coeffs: ReadonlyArray<number> = this.getCoefficients(coords);\n const m: number = coeffs[0];\n const b: number = coeffs[1];\n return \"y = \" + m.toFixed(3) + \"x + \" + b.toFixed(3);\n },\n});\n\nconst Quadratic: QuadraticType = _.extend({}, PlotDefaults, {\n url: \"https://ka-perseus-graphie.s3.amazonaws.com/e23d36e6fc29ee37174e92c9daba2a66677128ab.png\",\n\n defaultCoords: [\n [0.5, 0.5],\n [0.75, 0.75],\n ],\n movable: MOVABLES.PARABOLA,\n\n getCoefficients: function (coords: Coords): ReadonlyArray<number> {\n const p1 = coords[0];\n const p2 = coords[1];\n\n // Parabola with vertex (h, k) has form: y = a * (h - k)^2 + k\n const h = p1[0];\n const k = p1[1];\n\n // Use these to calculate familiar a, b, c\n const a = (p2[1] - k) / ((p2[0] - h) * (p2[0] - h));\n const b = -2 * h * a;\n const c = a * h * h + k;\n\n return [a, b, c];\n },\n\n getFunctionForCoeffs: function (\n coeffs: ReadonlyArray<number>,\n x: number,\n ): number {\n const a = coeffs[0];\n const b = coeffs[1];\n const c = coeffs[2];\n return (a * x + b) * x + c;\n },\n\n getPropsForCoeffs: function (coeffs: ReadonlyArray<number>): {\n a: number;\n b: number;\n c: number;\n } {\n return {\n a: coeffs[0],\n b: coeffs[1],\n c: coeffs[2],\n };\n },\n\n getEquationString: function (coords: Coords) {\n const coeffs = this.getCoefficients(coords);\n const a = coeffs[0];\n const b = coeffs[1];\n const c = coeffs[2];\n return (\n \"y = \" +\n a.toFixed(3) +\n \"x^2 + \" +\n b.toFixed(3) +\n \"x + \" +\n c.toFixed(3)\n );\n },\n});\n\nconst Sinusoid: SinusoidType = _.extend({}, PlotDefaults, {\n url: \"https://ka-perseus-graphie.s3.amazonaws.com/3d68e7718498475f53b206c2ab285626baf8857e.png\",\n\n defaultCoords: [\n [0.5, 0.5],\n [0.6, 0.6],\n ],\n movable: MOVABLES.SINUSOID,\n\n getCoefficients: function (coords: Coords) {\n const p1 = coords[0];\n const p2 = coords[1];\n\n const a = p2[1] - p1[1];\n const b = Math.PI / (2 * (p2[0] - p1[0]));\n const c = p1[0] * b;\n const d = p1[1];\n\n return [a, b, c, d];\n },\n\n getFunctionForCoeffs: function (coeffs: ReadonlyArray<number>, x: number) {\n const a = coeffs[0];\n const b = coeffs[1];\n const c = coeffs[2];\n const d = coeffs[3];\n return a * Math.sin(b * x - c) + d;\n },\n\n getPropsForCoeffs: function (coeffs: ReadonlyArray<number>) {\n return {\n a: coeffs[0],\n b: coeffs[1],\n c: coeffs[2],\n d: coeffs[3],\n };\n },\n\n getEquationString: function (coords: Coords) {\n const coeffs = this.getCoefficients(coords);\n const a = coeffs[0];\n const b = coeffs[1];\n const c = coeffs[2];\n const d = coeffs[3];\n return (\n \"y = \" +\n a.toFixed(3) +\n \" sin(\" +\n b.toFixed(3) +\n \"x - \" +\n c.toFixed(3) +\n \") + \" +\n d.toFixed(3)\n );\n },\n\n areEqual: function (\n coeffs1: ReadonlyArray<number>,\n coeffs2: ReadonlyArray<number>,\n ) {\n return approximateDeepEqual(\n canonicalSineCoefficients(coeffs1),\n canonicalSineCoefficients(coeffs2),\n );\n },\n});\n\nconst Tangent: TangentType = _.extend({}, PlotDefaults, {\n url: \"https://ka-perseus-graphie.s3.amazonaws.com/7db80d23c35214f98659fe1cf0765811c1bbfbba.png\",\n\n defaultCoords: [\n [0.5, 0.5],\n [0.75, 0.75],\n ],\n\n getCoefficients: function (coords: Coords) {\n const p1 = coords[0];\n const p2 = coords[1];\n\n const a = p2[1] - p1[1];\n const b = Math.PI / (4 * (p2[0] - p1[0]));\n const c = p1[0] * b;\n const d = p1[1];\n\n return [a, b, c, d];\n },\n\n getFunctionForCoeffs: function (coeffs: ReadonlyArray<number>, x: number) {\n const a = coeffs[0];\n const b = coeffs[1];\n const c = coeffs[2];\n const d = coeffs[3];\n return a * Math.tan(b * x - c) + d;\n },\n\n getEquationString: function (coords: Coords) {\n const coeffs = this.getCoefficients(coords);\n const a = coeffs[0];\n const b = coeffs[1];\n const c = coeffs[2];\n const d = coeffs[3];\n return (\n \"y = \" +\n a.toFixed(3) +\n \" sin(\" +\n b.toFixed(3) +\n \"x - \" +\n c.toFixed(3) +\n \") + \" +\n d.toFixed(3)\n );\n },\n\n areEqual: function (\n coeffs1: ReadonlyArray<number>,\n coeffs2: ReadonlyArray<number>,\n ) {\n return approximateDeepEqual(\n canonicalTangentCoefficients(coeffs1),\n canonicalTangentCoefficients(coeffs2),\n );\n },\n});\n\nconst Exponential: ExponentialType = _.extend({}, PlotDefaults, {\n url: \"https://ka-perseus-graphie.s3.amazonaws.com/9cbfad55525e3ce755a31a631b074670a5dad611.png\",\n\n defaultCoords: [\n [0.5, 0.55],\n [0.75, 0.75],\n ],\n\n defaultAsymptote: [\n [0, 0.5],\n [1.0, 0.5],\n ],\n\n /**\n * Add extra constraints for movement of the points or asymptote (below):\n * newCoord: [x, y]\n * The end position of the point or asymptote endpoint\n * oldCoord: [x, y]\n * The old position of the point or asymptote endpoint\n * coords:\n * An array of coordinates representing the proposed end configuration\n * of the plot coordinates.\n * asymptote:\n * An array of coordinates representing the proposed end configuration\n * of the asymptote.\n *\n * Return: either a coordinate (to be used as the resulting coordinate of\n * the move) or a boolean, where `true` uses newCoord as the resulting\n * coordinate, and `false` uses oldCoord as the resulting coordinate.\n */\n extraCoordConstraint: function (\n newCoord: Coord,\n oldCoord: Coord,\n coords: Coords,\n asymptote: Coords,\n graph,\n ) {\n const y: number = asymptote[0][1];\n return _.all(coords, (coord) => coord[1] !== y);\n },\n\n extraAsymptoteConstraint: function (\n newCoord: Coord,\n oldCoord: Coord,\n coords: Coords,\n asymptote: Coords,\n graph,\n ): Coord {\n const y = newCoord[1];\n const isValid =\n _.all(coords, (coord) => coord[1] > y) ||\n _.all(coords, (coord) => coord[1] < y);\n\n if (isValid) {\n return [oldCoord[0], y];\n }\n // Snap the asymptote as close as possible, i.e., if the user moves\n // the mouse really quickly into an invalid region\n const oldY = oldCoord[1];\n const wasBelow = _.all(coords, (coord) => coord[1] > oldY);\n if (wasBelow) {\n const bottomMost = _.min(_.map(coords, (coord) => coord[1]));\n return [oldCoord[0], bottomMost - graph.snapStep[1]];\n }\n const topMost = _.max(_.map(coords, (coord) => coord[1]));\n return [oldCoord[0], topMost + graph.snapStep[1]];\n },\n\n allowReflectOverAsymptote: true,\n\n getCoefficients: function (\n coords: Coords,\n asymptote: Coords,\n ): ReadonlyArray<number> {\n const p1 = coords[0];\n const p2 = coords[1];\n\n const c = asymptote[0][1];\n const b = Math.log((p1[1] - c) / (p2[1] - c)) / (p1[0] - p2[0]);\n const a = (p1[1] - c) / Math.exp(b * p1[0]);\n return [a, b, c];\n },\n\n getFunctionForCoeffs: function (\n coeffs: ReadonlyArray<number>,\n x: number,\n ): number {\n const a = coeffs[0];\n const b = coeffs[1];\n const c = coeffs[2];\n return a * Math.exp(b * x) + c;\n },\n\n getEquationString: function (coords: Coords, asymptote: Coords) {\n if (!asymptote) {\n return null;\n }\n const coeffs = this.getCoefficients(coords, asymptote);\n const a = coeffs[0];\n const b = coeffs[1];\n const c = coeffs[2];\n return (\n \"y = \" +\n a.toFixed(3) +\n \"e^(\" +\n b.toFixed(3) +\n \"x) + \" +\n c.toFixed(3)\n );\n },\n});\n\nconst Logarithm: LogarithmType = _.extend({}, PlotDefaults, {\n url: \"https://ka-perseus-graphie.s3.amazonaws.com/f6491e99d34af34d924bfe0231728ad912068dc3.png\",\n\n defaultCoords: [\n [0.55, 0.5],\n [0.75, 0.75],\n ],\n\n defaultAsymptote: [\n [0.5, 0],\n [0.5, 1.0],\n ],\n\n extraCoordConstraint: function (\n newCoord: Coord,\n oldCoord: Coord,\n coords: Coord,\n asymptote: Coords,\n graph,\n ) {\n const x = asymptote[0][0];\n return (\n _.all(coords, (coord) => coord[0] !== x) &&\n coords[0][1] !== coords[1][1]\n );\n },\n\n extraAsymptoteConstraint: function (\n newCoord: Coord,\n oldCoord: Coord,\n coords: Coords,\n asymptote: Coords,\n graph,\n ): ReadonlyArray<number> {\n const x = newCoord[0];\n const isValid =\n _.all(coords, (coord) => coord[0] > x) ||\n _.all(coords, (coord) => coord[0] < x);\n\n if (isValid) {\n return [x, oldCoord[1]];\n }\n // Snap the asymptote as close as possible, i.e., if the user moves\n // the mouse really quickly into an invalid region\n const oldX = oldCoord[0];\n const wasLeft = _.all(coords, (coord) => coord[0] > oldX);\n if (wasLeft) {\n const leftMost = _.min(_.map(coords, (coord) => coord[0]));\n return [leftMost - graph.snapStep[0], oldCoord[1]];\n }\n const rightMost = _.max(_.map(coords, (coord) => coord[0]));\n return [rightMost + graph.snapStep[0], oldCoord[1]];\n },\n\n allowReflectOverAsymptote: true,\n\n getCoefficients: function (\n coords: Coords,\n asymptote: Coords,\n ): ReadonlyArray<number> | undefined {\n // It's easiest to calculate the logarithm's coefficients by thinking\n // about it as the inverse of the exponential, so we flip x and y and\n // perform some algebra on the coefficients. This also unifies the\n // logic between the two 'models'.\n const flip = (coord: Coord): Coord => [coord[1], coord[0]];\n const inverseCoeffs = Exponential.getCoefficients(\n _.map(coords, flip) as Coords,\n _.map(asymptote, flip) as Coords,\n );\n if (inverseCoeffs) {\n const c = -inverseCoeffs[2] / inverseCoeffs[0];\n const b = 1 / inverseCoeffs[0];\n const a = 1 / inverseCoeffs[1];\n return [a, b, c];\n }\n },\n\n getFunctionForCoeffs: function (\n coeffs: ReadonlyArray<number>,\n x: number,\n asymptote: Coords,\n ) {\n const a = coeffs[0];\n const b = coeffs[1];\n const c = coeffs[2];\n return a * Math.log(b * x + c);\n },\n\n getEquationString: function (coords: Coords, asymptote: Coords) {\n if (!asymptote) {\n return null;\n }\n const coeffs: ReadonlyArray<number> = this.getCoefficients(\n coords,\n asymptote,\n );\n const a = coeffs[0];\n const b = coeffs[1];\n const c = coeffs[2];\n return (\n \"y = ln(\" +\n a.toFixed(3) +\n \"x + \" +\n b.toFixed(3) +\n \") + \" +\n c.toFixed(3)\n );\n },\n});\n\nconst AbsoluteValue: AbsoluteValueType = _.extend({}, PlotDefaults, {\n url: \"https://ka-perseus-graphie.s3.amazonaws.com/8256a630175a0cb1d11de223d6de0266daf98721.png\",\n\n defaultCoords: [\n [0.5, 0.5],\n [0.75, 0.75],\n ],\n\n getCoefficients: function (\n coords: Coords,\n ): ReadonlyArray<number> | undefined {\n const p1 = coords[0];\n const p2 = coords[1];\n\n const denom = p2[0] - p1[0];\n const num = p2[1] - p1[1];\n\n if (denom === 0) {\n return;\n }\n\n let m = Math.abs(num / denom);\n if (p2[1] < p1[1]) {\n m *= -1;\n }\n const horizontalOffset = p1[0];\n const verticalOffset = p1[1];\n\n return [m, horizontalOffset, verticalOffset];\n },\n\n getFunctionForCoeffs: function (coeffs: ReadonlyArray<number>, x: number) {\n const m = coeffs[0];\n const horizontalOffset = coeffs[1];\n const verticalOffset = coeffs[2];\n return m * Math.abs(x - horizontalOffset) + verticalOffset;\n },\n\n getEquationString: function (coords: Coords) {\n const coeffs: ReadonlyArray<number> = this.getCoefficients(coords);\n const m = coeffs[0];\n const horizontalOffset = coeffs[1];\n const verticalOffset = coeffs[2];\n return (\n \"y = \" +\n m.toFixed(3) +\n \"| x - \" +\n horizontalOffset.toFixed(3) +\n \"| + \" +\n verticalOffset.toFixed(3)\n );\n },\n});\n\n/* Utility functions for dealing with graphing interfaces. */\nconst functionTypeMapping = {\n linear: Linear,\n quadratic: Quadratic,\n sinusoid: Sinusoid,\n tangent: Tangent,\n exponential: Exponential,\n logarithm: Logarithm,\n absolute_value: AbsoluteValue,\n} as const;\n\nexport const allTypes: any = _.keys(functionTypeMapping);\n\nexport type FunctionTypeMappingKeys = keyof typeof functionTypeMapping;\n\ntype ConditionalGraderType<T extends FunctionTypeMappingKeys> =\n // prettier-ignore\n T extends \"linear\" ? LinearType\n : T extends \"quadratic\" ? QuadraticType\n : T extends \"sinusoid\" ? SinusoidType\n : T extends \"tangent\" ? TangentType\n : T extends \"exponential\" ? ExponentialType\n : T extends \"logarithm\" ? LogarithmType\n : T extends \"absolute_value\" ? AbsoluteValueType\n : never;\n\nexport function functionForType<T extends FunctionTypeMappingKeys>(\n type: T,\n): ConditionalGraderType<T> {\n // @ts-expect-error: TypeScript doesn't know how to use deal with generics\n // and conditional types in this way.\n return functionTypeMapping[type];\n}\n","import {approximateDeepEqual} from \"./equality\";\n\nexport function isRealJSONParse(jsonParse: typeof JSON.parse): boolean {\n const randomPhrase = buildRandomPhrase();\n const randomHintPhrase = buildRandomPhrase();\n const randomString = buildRandomString();\n const testingObject = JSON.stringify({\n answerArea: {\n calculator: false,\n chi2Table: false,\n financialCalculatorMonthlyPayment: false,\n financialCalculatorTimeToPayOff: false,\n financialCalculatorTotalAmount: false,\n periodicTable: false,\n periodicTableWithKey: false,\n tTable: false,\n zTable: false,\n },\n hints: [randomHintPhrase, `=${Math.floor(Math.random() * 50) + 1}`],\n itemDataVersion: {major: 0, minor: 1},\n question: {\n content: `${randomPhrase}`,\n images: {},\n widgets: {\n expression1: {\n alignment: \"default\",\n graded: false,\n options: {\n answerForms: [\n {\n considered: \"wrong\",\n form: false,\n key: 0,\n simplify: false,\n value: `${randomString}`,\n },\n ],\n ariaLabel: \"Answer\",\n buttonSets: [\"basic\"],\n functions: [\"f\", \"g\", \"h\"],\n static: true,\n times: false,\n visibleLabel: \"Answer\",\n },\n static: true,\n type: \"expression\",\n version: {major: 1, minor: 0},\n },\n },\n },\n });\n const testJSON = buildTestData(testingObject.replace(/\"/g, '\\\\\"'));\n const parsedTestJSON = jsonParse(testJSON);\n const parsedTestItemData: string =\n parsedTestJSON.data.assessmentItem.item.itemData;\n return approximateDeepEqual(parsedTestItemData, testingObject);\n}\n\nfunction buildRandomString(capitalize: boolean = false) {\n let randomString: string = \"\";\n const randomLength = Math.floor(Math.random() * 8) + 3;\n for (let i = 0; i < randomLength; i++) {\n const randomLetter = String.fromCharCode(\n 97 + Math.floor(Math.random() * 26),\n );\n randomString +=\n capitalize && i === 0 ? randomLetter.toUpperCase() : randomLetter;\n }\n return randomString;\n}\n\nfunction buildRandomPhrase() {\n const phrases: string[] = [];\n const randomLength = Math.floor(Math.random() * 10) + 5;\n for (let i = 0; i < randomLength; i++) {\n phrases.push(buildRandomString(i === 0));\n }\n const modifierStart = [\"**\", \"$\"];\n const modifierEnd = [\"**\", \"$\"];\n const modifierIndex = Math.floor(Math.random() * modifierStart.length);\n return `${modifierStart[modifierIndex]}${phrases.join(\" \")}${modifierEnd[modifierIndex]}`;\n}\n\nfunction buildTestData(testObject: string) {\n return `{\"data\":{\"assessmentItem\":{\"__typename\":\"AssessmentItemOrError\",\"error\":null,\"item\":{\"__typename\":\"AssessmentItem\",\"id\":\"x890b3c70f3e8f4a6\",\"itemData\":\"${testObject}\",\"problemType\":\"Type 1\",\"sha\":\"c7284a3ad65214b4e62bccce236d92f7f5d35941\"}}}}`;\n}\n","var isProduction = process.env.NODE_ENV === 'production';\nvar prefix = 'Invariant failed';\nfunction invariant(condition, message) {\n if (condition) {\n return;\n }\n if (isProduction) {\n throw new Error(prefix);\n }\n var provided = typeof message === 'function' ? message() : message;\n var value = provided ? \"\".concat(prefix, \": \").concat(provided) : prefix;\n throw new Error(value);\n}\n\nexport { invariant as default };\n","import invariant from \"tiny-invariant\";\n\nexport type Result<S, F> = Success<S> | Failure<F>;\n\nexport type Success<T> = {type: \"success\"; value: T};\nexport type Failure<T> = {type: \"failure\"; detail: T};\n\nexport function success<T>(value: T): Success<T> {\n return {type: \"success\", value};\n}\n\nexport function failure<T>(detail: T): Failure<T> {\n return {type: \"failure\", detail};\n}\n\nexport function isFailure<S, F>(result: Result<S, F>): result is Failure<F> {\n return result.type === \"failure\";\n}\n\nexport function isSuccess<S, F>(result: Result<S, F>): result is Success<S> {\n return result.type === \"success\";\n}\n\nexport function assertFailure<S, F>(\n result: Result<S, F>,\n): asserts result is Failure<F> {\n invariant(\n isFailure(result),\n \"expected result to be a Failure, but got a Success\",\n );\n}\n\nexport function assertSuccess<S, F>(\n result: Result<S, F>,\n): asserts result is Success<S> {\n invariant(\n isSuccess(result),\n \"expected result to be a Success, but got a Failure\",\n );\n}\n\n/**\n * @returns a function that transforms the `detail` value of any Failure result\n * passed to it, and leaves Success results unchanged. `mapFailure` is curried\n * for easy composition with Array.map(), mu-lambda's pipe(), etc.\n * @param f the function to apply to Failure `detail`s.\n */\nexport function mapFailure<S, DetailIn, DetailOut>(\n f: (detail: DetailIn) => DetailOut,\n): (result: Result<S, DetailIn>) => Result<S, DetailOut> {\n return (result) => {\n if (isFailure(result)) {\n return failure(f(result.detail));\n }\n return result;\n };\n}\n\n// Result's `all` function is similar to Promise.all: given an array of\n// results, it returns success if all succeeded, and failure if any failed.\nexport function all<S, F>(\n results: Array<Result<S, F>>,\n combineFailureDetails: (a: F, b: F) => F = (a) => a,\n): Result<S[], F> {\n const values: S[] = [];\n const failureDetails: F[] = [];\n for (const result of results) {\n if (result.type === \"success\") {\n values.push(result.value);\n } else {\n failureDetails.push(result.detail);\n }\n }\n\n if (failureDetails.length > 0) {\n return failure(failureDetails.reduce(combineFailureDetails));\n }\n return success(values);\n}\n","import {failure, success} from \"./result\";\n\nimport type {ParseContext, Mismatch, PathSegment} from \"./parser-types\";\nimport type {Failure, Success} from \"./result\";\n\nexport class ErrorTrackingParseContext implements ParseContext {\n constructor(private readonly path: PathSegment[]) {}\n\n failure(\n expected: string | string[],\n badValue: unknown,\n ): Failure<Mismatch[]> {\n return failure([\n {\n expected: wrapInArray(expected),\n badValue,\n path: this.path,\n },\n ]);\n }\n\n forSubtree(key: PathSegment): ParseContext {\n return new ErrorTrackingParseContext([...this.path, key]);\n }\n\n success<T>(value: T): Success<T> {\n return success(value);\n }\n}\n\nfunction wrapInArray(a: string | string[]): string[] {\n return Array.isArray(a) ? a : [a];\n}\n","import type {PathSegment} from \"./parser-types\";\n\nexport function formatPath(path: PathSegment[]): string {\n return \"(root)\" + path.map(formatPathSegment).join(\"\");\n}\n\nfunction formatPathSegment(segment: PathSegment): string {\n if (typeof segment === \"string\") {\n return validIdentifier.test(segment)\n ? \".\" + segment\n : `[${JSON.stringify(segment)}]`;\n }\n return `[${segment.toString()}]`;\n}\n\nconst validIdentifier = /^[A-Za-z$_][A-Za-z$_0-9]*$/;\n","import {formatPath} from \"./object-path\";\n\nimport type {Mismatch} from \"./parser-types\";\n\nexport function message(failure: Mismatch): string {\n const expected = conjoin(failure.expected);\n const path = formatPath(failure.path);\n const badValue = JSON.stringify(failure.badValue);\n return `At ${path} -- expected ${expected}, but got ${badValue}`;\n}\n\nfunction conjoin(items: string[]): string {\n switch (items.length) {\n // TODO(benchristel): handle 0 if this is reused elsewhere.\n case 1:\n return items[0];\n case 2:\n return items.join(\" or \");\n default: {\n const allButLast = items.slice(0, items.length - 1);\n const last = items[items.length - 1];\n return allButLast.join(\", \") + \", or \" + last;\n }\n }\n}\n","import {ErrorTrackingParseContext} from \"./error-tracking-parse-context\";\nimport {message} from \"./parse-failure-detail\";\nimport {failure, isFailure} from \"./result\";\n\nimport type {Parser} from \"./parser-types\";\nimport type {Result} from \"./result\";\n\nexport function parse<T>(value: unknown, parser: Parser<T>): Result<T, string> {\n const result = parser(value, new ErrorTrackingParseContext([]));\n if (isFailure(result)) {\n return failure(result.detail.map(message).join(\"; \"));\n }\n return result;\n}\n","import type {Parser} from \"../parser-types\";\n\nexport const any: Parser<any> = (rawValue, ctx) => ctx.success(rawValue);\n","import * as Result from \"../result\";\n\nimport type {ParseContext, Parser} from \"../parser-types\";\n\nexport function array<T>(elementParser: Parser<T>): Parser<T[]> {\n return (rawValue: unknown, ctx: ParseContext) => {\n if (!Array.isArray(rawValue)) {\n return ctx.failure(\"array\", rawValue);\n }\n const elementResults = rawValue.map((elem, i) =>\n elementParser(elem, ctx.forSubtree(i)),\n );\n return Result.all(elementResults, concat);\n };\n}\n\nfunction concat<T>(a: T[], b: T[]): T[] {\n return [...a, ...b];\n}\n","import type {ParseContext, ParseResult} from \"../parser-types\";\n\nexport function boolean(\n rawValue: unknown,\n ctx: ParseContext,\n): ParseResult<boolean> {\n if (typeof rawValue === \"boolean\") {\n return ctx.success(rawValue);\n }\n return ctx.failure(\"boolean\", rawValue);\n}\n","import type {Parser} from \"../parser-types\";\n\ntype Primitive = string | number | boolean | null | undefined;\n\nexport function constant<T extends Primitive>(acceptedValue: T): Parser<T> {\n return (rawValue, ctx) => {\n if (rawValue !== acceptedValue) {\n return ctx.failure(String(JSON.stringify(acceptedValue)), rawValue);\n }\n return ctx.success(acceptedValue);\n };\n}\n","import type {Parser} from \"../parser-types\";\n\nexport function enumeration<T extends readonly string[]>(\n ...acceptedValues: T\n): Parser<T[number]> {\n return (rawValue, ctx) => {\n if (typeof rawValue === \"string\") {\n const index = acceptedValues.indexOf(rawValue);\n if (index > -1) {\n return ctx.success(acceptedValues[index]);\n }\n }\n const expected = acceptedValues.map((v) => JSON.stringify(v));\n return ctx.failure(expected, rawValue);\n };\n}\n","export function isObject(x: unknown): x is Record<keyof any, unknown> {\n return x != null && Object.getPrototypeOf(x) === Object.prototype;\n}\n","import type {Parser} from \"../parser-types\";\n\nexport function nullable<T>(parseValue: Parser<T>): Parser<T | null> {\n return (rawValue, ctx) => {\n if (rawValue === null) {\n return ctx.success(rawValue);\n }\n return parseValue(rawValue, ctx);\n };\n}\n","import type {Parser} from \"../parser-types\";\n\nexport const number: Parser<number> = (rawValue, ctx) => {\n if (typeof rawValue === \"number\") {\n return ctx.success(rawValue);\n }\n return ctx.failure(\"number\", rawValue);\n};\n","import {failure, isSuccess} from \"../result\";\n\nimport {isObject} from \"./is-object\";\n\nimport type {Mismatch, ParsedValue, Parser} from \"../parser-types\";\n\ntype ObjectSchema = Record<keyof any, Parser<any>>;\n\nexport function object<S extends ObjectSchema>(\n schema: S,\n): Parser<{[K in keyof S]: ParsedValue<S[K]>}> {\n return (rawValue, ctx) => {\n if (!isObject(rawValue)) {\n return ctx.failure(\"object\", rawValue);\n }\n\n const ret: any = {...rawValue};\n const mismatches: Mismatch[] = [];\n for (const [prop, propParser] of Object.entries(schema)) {\n const result = propParser(rawValue[prop], ctx.forSubtree(prop));\n if (isSuccess(result)) {\n if (result.value !== undefined || prop in rawValue) {\n ret[prop] = result.value;\n }\n } else {\n mismatches.push(...result.detail);\n }\n }\n\n if (mismatches.length > 0) {\n return failure(mismatches);\n }\n return ctx.success(ret);\n };\n}\n","import type {Parser} from \"../parser-types\";\n\nexport function optional<T>(parseValue: Parser<T>): Parser<T | undefined> {\n return (rawValue, ctx) => {\n if (rawValue === undefined) {\n return ctx.success(rawValue);\n }\n return parseValue(rawValue, ctx);\n };\n}\n","import {isFailure} from \"../result\";\n\nimport type {Parser} from \"../parser-types\";\n\nexport function pair<A, B>(\n parseA: Parser<A>,\n parseB: Parser<B>,\n): Parser<[A, B]> {\n return (rawValue, ctx) => {\n if (!Array.isArray(rawValue)) {\n return ctx.failure(\"array\", rawValue);\n }\n if (rawValue.length !== 2) {\n return ctx.failure(\"array of length 2\", rawValue);\n }\n const [rawA, rawB] = rawValue;\n const resultA = parseA(rawA, ctx.forSubtree(0));\n if (isFailure(resultA)) {\n return resultA;\n }\n const resultB = parseB(rawB, ctx.forSubtree(1));\n if (isFailure(resultB)) {\n return resultB;\n }\n\n return ctx.success([resultA.value, resultB.value]);\n };\n}\n","import {isFailure} from \"../result\";\n\nimport type {\n ParseContext,\n ParsedValue,\n Parser,\n PartialParser,\n} from \"../parser-types\";\n\nexport function pipeParsers<T>(p: Parser<T>): ParserPipeline<T> {\n return new ParserPipeline(p);\n}\n\nexport class ParserPipeline<T> {\n constructor(public readonly parser: Parser<T>) {}\n\n then<U>(nextParser: PartialParser<T, U>): ParserPipeline<U> {\n return new ParserPipeline<U>(composeParsers(this.parser, nextParser));\n }\n}\n\nfunction composeParsers<\n A extends Parser<any>,\n B extends PartialParser<ParsedValue<A>, any>,\n>(parserA: A, parserB: B): Parser<ParsedValue<B>> {\n return (rawValue: unknown, ctx: ParseContext) => {\n const partialResult = parserA(rawValue, ctx);\n if (isFailure(partialResult)) {\n return partialResult;\n }\n\n return parserB(partialResult.value, ctx);\n };\n}\n","import {failure, isFailure, isSuccess} from \"../result\";\n\nimport {isObject} from \"./is-object\";\n\nimport type {Mismatch, Parser} from \"../parser-types\";\n\nexport function record<K extends string, V>(\n parseKey: Parser<K>,\n parseValue: Parser<V>,\n): Parser<Record<K, V>> {\n return (rawValue, ctx) => {\n if (!isObject(rawValue)) {\n return ctx.failure(\"object\", rawValue);\n }\n\n const result = {} as Record<K, V>;\n const mismatches: Mismatch[] = [];\n for (const [key, value] of Object.entries(rawValue)) {\n const entryCtx = ctx.forSubtree(key);\n const keyResult = parseKey(key, entryCtx);\n if (isFailure(keyResult)) {\n mismatches.push(...keyResult.detail);\n }\n\n const valueResult = parseValue(value, entryCtx);\n if (isFailure(valueResult)) {\n mismatches.push(...valueResult.detail);\n }\n\n if (isSuccess(keyResult) && isSuccess(valueResult)) {\n result[keyResult.value] = valueResult.value;\n }\n }\n\n if (mismatches.length > 0) {\n return failure(mismatches);\n }\n return ctx.success(result);\n };\n}\n","import type {Parser} from \"../parser-types\";\n\nexport const string: Parser<string> = (rawValue, ctx) => {\n if (typeof rawValue === \"string\") {\n return ctx.success(rawValue);\n }\n return ctx.failure(\"string\", rawValue);\n};\n","import {isFailure} from \"../result\";\n\nimport type {Parser} from \"../parser-types\";\n\nexport function trio<A, B, C>(\n parseA: Parser<A>,\n parseB: Parser<B>,\n parseC: Parser<C>,\n): Parser<[A, B, C]> {\n return (rawValue, ctx) => {\n if (!Array.isArray(rawValue)) {\n return ctx.failure(\"array\", rawValue);\n }\n if (rawValue.length !== 3) {\n return ctx.failure(\"array of length 3\", rawValue);\n }\n\n const resultA = parseA(rawValue[0], ctx.forSubtree(0));\n if (isFailure(resultA)) {\n return resultA;\n }\n\n const resultB = parseB(rawValue[1], ctx.forSubtree(1));\n if (isFailure(resultB)) {\n return resultB;\n }\n\n const resultC = parseC(rawValue[2], ctx.forSubtree(2));\n if (isFailure(resultC)) {\n return resultC;\n }\n\n return ctx.success([resultA.value, resultB.value, resultC.value]);\n };\n}\n","import {isSuccess} from \"../result\";\n\nimport type {Parser} from \"../parser-types\";\n\nexport function union<T>(parseBranch: Parser<T>): UnionBuilder<T> {\n return new UnionBuilder(parseBranch);\n}\n\nexport class UnionBuilder<T> {\n constructor(public parser: Parser<T>) {}\n\n or<New>(newBranch: Parser<New>) {\n return new UnionBuilder<T | New>(either(this.parser, newBranch));\n }\n}\n\nfunction either<A, B>(parseA: Parser<A>, parseB: Parser<B>): Parser<A | B> {\n return (rawValue, ctx) => {\n const resultA = parseA(rawValue, ctx);\n if (isSuccess(resultA)) {\n return resultA;\n }\n\n return parseB(rawValue, ctx);\n };\n}\n","import {success} from \"../result\";\n\nimport type {Parser} from \"../parser-types\";\n\nexport function defaulted<T, Default>(\n parser: Parser<T>,\n fallback: (missingValue: null | undefined) => Default,\n): Parser<T | Default> {\n return (rawValue, ctx) => {\n if (rawValue == null) {\n return success(fallback(rawValue));\n }\n return parser(rawValue, ctx);\n };\n}\n","import {number, object, record, string} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport type {PerseusImageDetail} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parseImages: Parser<{[key: string]: PerseusImageDetail}> =\n defaulted(\n record(\n string,\n object({\n width: number,\n height: number,\n }),\n ),\n () => ({}),\n );\n","import {\n boolean,\n nullable,\n number,\n object,\n optional,\n string,\n} from \"../general-purpose-parsers\";\n\nimport type {WidgetOptions} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport function parseWidget<Type extends string, Options>(\n parseType: Parser<Type>,\n parseOptions: Parser<Options>,\n): Parser<WidgetOptions<Type, Options>> {\n return object({\n type: parseType,\n static: optional(boolean),\n graded: optional(boolean),\n alignment: optional(string),\n options: parseOptions,\n key: optional(nullable(number)),\n version: optional(\n object({\n major: number,\n minor: number,\n }),\n ),\n });\n}\n\nexport function parseWidgetWithVersion<\n Version extends {major: number; minor: number} | undefined,\n Type extends string,\n Options,\n>(\n parseVersion: Parser<Version>,\n parseType: Parser<Type>,\n parseOptions: Parser<Options>,\n): Parser<WidgetOptions<Type, Options>> {\n return object({\n type: parseType,\n static: optional(boolean),\n graded: optional(boolean),\n alignment: optional(string),\n options: parseOptions,\n key: optional(number),\n version: parseVersion,\n });\n}\n","import {\n array,\n boolean,\n constant,\n number,\n object,\n optional,\n string,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {CategorizerWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parseCategorizerWidget: Parser<CategorizerWidget> = parseWidget(\n constant(\"categorizer\"),\n object({\n items: array(string),\n categories: array(string),\n randomizeItems: defaulted(boolean, () => false),\n static: defaulted(boolean, () => false),\n values: array(defaulted(number, () => 0)),\n highlightLint: optional(boolean),\n linterContext: optional(\n object({\n contentType: string,\n paths: array(string),\n stack: array(string),\n }),\n ),\n }),\n);\n","import {\n any,\n array,\n boolean,\n constant,\n number,\n object,\n string,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {CSProgramWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parseCSProgramWidget: Parser<CSProgramWidget> = parseWidget(\n constant(\"cs-program\"),\n object({\n programID: string,\n programType: any,\n settings: array(object({name: string, value: string})),\n showEditor: boolean,\n showButtons: boolean,\n height: number,\n static: defaulted(boolean, () => false),\n }),\n);\n","import {boolean, constant, object, string} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {DefinitionWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parseDefinitionWidget: Parser<DefinitionWidget> = parseWidget(\n constant(\"definition\"),\n object({\n togglePrompt: string,\n definition: string,\n static: defaulted(boolean, () => false),\n }),\n);\n","import {\n array,\n boolean,\n constant,\n object,\n string,\n optional,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {DropdownWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parseDropdownWidget: Parser<DropdownWidget> = parseWidget(\n constant(\"dropdown\"),\n object({\n placeholder: defaulted(string, () => \"\"),\n ariaLabel: optional(string),\n visibleLabel: optional(string),\n static: defaulted(boolean, () => false),\n choices: array(\n object({\n content: string,\n correct: boolean,\n }),\n ),\n }),\n);\n","import {boolean, constant, object, string} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\nimport {parseWidgetsMap} from \"./widgets-map\";\n\nimport type {ExplanationWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parseExplanationWidget: Parser<ExplanationWidget> = parseWidget(\n constant(\"explanation\"),\n object({\n showPrompt: string,\n hidePrompt: string,\n explanation: string,\n // We wrap parseWidgetsMap in a function here to make sure it is not\n // referenced before it is defined. There is an import cycle between\n // this file and widgets-map.ts that could cause it to be undefined.\n widgets: defaulted(\n (rawVal, ctx) => parseWidgetsMap(rawVal, ctx),\n () => ({}),\n ),\n static: defaulted(boolean, () => false),\n }),\n);\n","import type {PartialParser} from \"../parser-types\";\n\n// Given a function, creates a PartialParser that converts one type to another\n// using that function. The returned parser never fails.\nexport function convert<A, B>(f: (value: A) => B): PartialParser<A, B> {\n return (rawValue, ctx) => ctx.success(f(rawValue));\n}\n","import {array, enumeration} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nexport const parseLegacyButtonSet = enumeration(\n \"basic\",\n \"basic+div\",\n \"trig\",\n \"prealgebra\",\n \"logarithms\",\n \"basic relations\",\n \"advanced relations\",\n \"scientific\",\n);\n\nexport const parseLegacyButtonSets = defaulted(\n array(parseLegacyButtonSet),\n // NOTE(benchristel): I copied the default buttonSets from\n // expression.tsx. See the parse-perseus-json/README.md for\n // an explanation of why we want to duplicate the default here.\n () => [\"basic\", \"trig\", \"prealgebra\", \"logarithms\"] as const,\n);\n","import {\n isObject,\n number,\n object,\n pipeParsers,\n} from \"../general-purpose-parsers\";\nimport {convert} from \"../general-purpose-parsers/convert\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\nimport {isFailure} from \"../result\";\n\nimport type {Version} from \"../../data-schema\";\nimport type {ParseContext, Parser} from \"../parser-types\";\n\ntype Versioned = {\n version?: Version;\n};\n\n/**\n * Creates a parser for a widget options type with multiple major versions. Old\n * versions are migrated to the latest version. The parse fails if the input\n * data does not match any of the versions.\n *\n * @example\n * const parseOptions = versionedWidgetOptions(3, parseOptionsV3)\n * .withMigrationFrom(2, parseOptionsV2, migrateV2ToV3)\n * .withMigrationFrom(1, parseOptionsV1, migrateV1ToV2)\n * .withMigrationFrom(0, parseOptionsV0, migrateV0ToV1)\n * .parser;\n *\n * @param latestMajorVersion the latest major version of the widget options.\n * @param parseLatest a {@link Parser} for the latest version of the widget\n * options.\n * @returns a builder object, to which migrations from earlier versions can be\n * added. Migrations must be added in \"reverse chronological\" order as in the\n * example above.\n */\nexport function versionedWidgetOptions<Latest extends Versioned>(\n latestMajorVersion: number,\n parseLatest: Parser<Latest>,\n): VersionedWidgetOptionsParserBuilder<Latest, Latest> {\n return new VersionedWidgetOptionsParserBuilder(\n latestMajorVersion,\n parseLatest,\n (latest) => latest,\n (raw, ctx) =>\n ctx.failure(\"widget options with a known version number\", raw),\n );\n}\n\nclass VersionedWidgetOptionsParserBuilder<\n // The latest version of the widget options\n Latest extends Versioned,\n // A version of the widget options which we want to migrate to Latest.\n MigratableWidgetOptions extends Versioned,\n> {\n public parser: Parser<Latest>;\n\n constructor(\n majorVersion: number,\n parseThisVersion: Parser<MigratableWidgetOptions>,\n private migrateToLatest: (m: MigratableWidgetOptions) => Latest,\n private parseOtherVersions: Parser<Latest>,\n ) {\n const parseThisVersionAndMigrateToLatest = pipeParsers(\n parseThisVersion,\n ).then(convert(this.migrateToLatest)).parser;\n\n this.parser = (raw: unknown, ctx: ParseContext) => {\n if (!isObject(raw)) {\n return ctx.failure(\"object\", raw);\n }\n\n const versionParseResult = parseVersionedObject(raw, ctx);\n if (isFailure(versionParseResult)) {\n return versionParseResult;\n }\n\n if (versionParseResult.value.version.major !== majorVersion) {\n return this.parseOtherVersions(raw, ctx);\n }\n\n return parseThisVersionAndMigrateToLatest(raw, ctx);\n };\n }\n\n /**\n * Add a migration from an old version of the widget options.\n */\n withMigrationFrom<Old extends Versioned>(\n majorVersion: number,\n parseOldVersion: Parser<Old>,\n migrateToNextVersion: (old: Old) => MigratableWidgetOptions,\n ): VersionedWidgetOptionsParserBuilder<Latest, Old> {\n const parseOtherVersions = this.parser;\n\n const migrateToLatest = (old: Old) =>\n this.migrateToLatest(migrateToNextVersion(old));\n\n return new VersionedWidgetOptionsParserBuilder(\n majorVersion,\n parseOldVersion,\n migrateToLatest,\n parseOtherVersions,\n );\n }\n}\n\nconst parseVersionedObject = object({\n version: defaulted(object({major: number, minor: number}), () => ({\n major: 0,\n minor: 0,\n })),\n});\n","import {\n array,\n boolean,\n constant,\n enumeration,\n number,\n object,\n optional,\n pipeParsers,\n string,\n union,\n} from \"../general-purpose-parsers\";\nimport {convert} from \"../general-purpose-parsers/convert\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseLegacyButtonSets} from \"./legacy-button-sets\";\nimport {versionedWidgetOptions} from \"./versioned-widget-options\";\nimport {parseWidgetWithVersion} from \"./widget\";\n\nimport type {\n ExpressionWidget,\n PerseusExpressionAnswerForm,\n} from \"../../data-schema\";\nimport type {ParsedValue, Parser} from \"../parser-types\";\n\nconst stringOrNumberOrNullOrUndefined = union(string)\n .or(number)\n .or(constant(null))\n .or(constant(undefined)).parser;\n\nconst parsePossiblyInvalidAnswerForm = object({\n // `value` is the possibly invalid part of this. It should always be a\n // string, but some answer forms don't have it. The Expression widget\n // ignores invalid values, so we can safely filter them out during parsing.\n value: optional(string),\n form: defaulted(boolean, () => false),\n simplify: defaulted(boolean, () => false),\n considered: enumeration(\"correct\", \"wrong\", \"ungraded\"),\n key: pipeParsers(stringOrNumberOrNullOrUndefined).then(convert(String))\n .parser,\n});\n\nfunction removeInvalidAnswerForms(\n possiblyInvalid: Array<ParsedValue<typeof parsePossiblyInvalidAnswerForm>>,\n): PerseusExpressionAnswerForm[] {\n const valid: PerseusExpressionAnswerForm[] = [];\n for (const answerForm of possiblyInvalid) {\n const {value} = answerForm;\n if (value != null) {\n // Copying the object seems to be needed to make TypeScript happy\n valid.push({...answerForm, value});\n }\n }\n return valid;\n}\n\nconst version1 = object({major: constant(1), minor: number});\nconst parseExpressionWidgetV1: Parser<ExpressionWidget> =\n parseWidgetWithVersion(\n version1,\n constant(\"expression\"),\n object({\n answerForms: pipeParsers(\n array(parsePossiblyInvalidAnswerForm),\n ).then(convert(removeInvalidAnswerForms)).parser,\n functions: array(string),\n times: boolean,\n visibleLabel: optional(string),\n ariaLabel: optional(string),\n buttonSets: parseLegacyButtonSets,\n buttonsVisible: optional(enumeration(\"always\", \"never\", \"focused\")),\n }),\n );\n\nconst version0 = optional(object({major: constant(0), minor: number}));\nconst parseExpressionWidgetV0 = parseWidgetWithVersion(\n version0,\n constant(\"expression\"),\n object({\n functions: array(string),\n times: boolean,\n visibleLabel: optional(string),\n ariaLabel: optional(string),\n form: boolean,\n simplify: boolean,\n value: string,\n buttonSets: parseLegacyButtonSets,\n buttonsVisible: optional(enumeration(\"always\", \"never\", \"focused\")),\n }),\n);\n\nfunction migrateV0ToV1(\n widget: ParsedValue<typeof parseExpressionWidgetV0>,\n): ExpressionWidget {\n const {options} = widget;\n return {\n ...widget,\n version: {major: 1, minor: 0},\n options: {\n times: options.times,\n buttonSets: options.buttonSets,\n functions: options.functions,\n buttonsVisible: options.buttonsVisible,\n visibleLabel: options.visibleLabel,\n ariaLabel: options.ariaLabel,\n\n answerForms: [\n {\n considered: \"correct\",\n form: options.form,\n simplify: options.simplify,\n value: options.value,\n },\n ],\n },\n };\n}\n\nexport const parseExpressionWidget: Parser<ExpressionWidget> =\n versionedWidgetOptions(1, parseExpressionWidgetV1).withMigrationFrom(\n 0,\n parseExpressionWidgetV0,\n migrateV0ToV1,\n ).parser;\n","import {\n boolean,\n constant,\n nullable,\n number,\n object,\n optional,\n pipeParsers,\n record,\n string,\n union,\n} from \"../general-purpose-parsers\";\nimport {convert} from \"../general-purpose-parsers/convert\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parsePerseusRenderer} from \"./perseus-renderer\";\nimport {parseWidget} from \"./widget\";\nimport {parseWidgetsMap} from \"./widgets-map\";\n\nimport type {GradedGroupWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nconst falseToNull = pipeParsers(constant(false)).then(\n convert(() => null),\n).parser;\nexport const parseGradedGroupWidgetOptions = object({\n title: defaulted(string, () => \"\"),\n hasHint: optional(nullable(boolean)),\n // This module has an import cycle with parsePerseusRenderer.\n // The anonymous function below ensures that we don't try to access\n // parsePerseusRenderer before it's defined.\n hint: union(falseToNull)\n .or(constant(null))\n .or(constant(undefined))\n .or((rawVal, ctx) => parsePerseusRenderer(rawVal, ctx)).parser,\n content: string,\n // This module has an import cycle with parseWidgetsMap.\n // The anonymous function below ensures that we don't try to access\n // parseWidgetsMap before it's defined.\n widgets: (rawVal, ctx) => parseWidgetsMap(rawVal, ctx),\n widgetEnabled: optional(nullable(boolean)),\n immutableWidgets: optional(nullable(boolean)),\n images: record(\n string,\n object({\n width: number,\n height: number,\n }),\n ),\n});\n\nexport const parseGradedGroupWidget: Parser<GradedGroupWidget> = parseWidget(\n constant(\"graded-group\"),\n parseGradedGroupWidgetOptions,\n);\n","import {array, constant, object} from \"../general-purpose-parsers\";\n\nimport {parseGradedGroupWidgetOptions} from \"./graded-group-widget\";\nimport {parseWidget} from \"./widget\";\n\nimport type {GradedGroupSetWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parseGradedGroupSetWidget: Parser<GradedGroupSetWidget> =\n parseWidget(\n constant(\"graded-group-set\"),\n object({gradedGroups: array(parseGradedGroupWidgetOptions)}),\n );\n","import {isObject} from \"./is-object\";\n\nimport type {ParseContext, Parser} from \"../parser-types\";\n\ntype Primitive = number | string | boolean | null | undefined;\n\n/**\n * discriminatedUnion() should be preferred over union() when parsing a\n * discriminated union type, because discriminatedUnion() produces more\n * understandable failure messages. It takes the discriminant as the source of\n * truth for which variant is to be parsed, and expects the other data to match\n * that variant.\n */\nexport function discriminatedUnionOn<DK extends string>(discriminantKey: DK) {\n const noMoreBranches: Parser<never> = (raw: unknown, ctx: ParseContext) => {\n if (!isObject(raw)) {\n return ctx.failure(\"object\", raw);\n }\n return ctx\n .forSubtree(discriminantKey)\n .failure(\"a valid value\", raw[discriminantKey]);\n };\n\n return new DiscriminatedUnionBuilder(discriminantKey, noMoreBranches);\n}\n\nclass DiscriminatedUnionBuilder<\n DK extends string,\n Union extends {[k in DK]: Primitive},\n> {\n constructor(\n private discriminantKey: DK,\n public parser: Parser<Union>,\n ) {}\n\n withBranch<Variant extends {[k in DK]: Primitive}>(\n discriminantValue: Primitive,\n parseNewVariant: Parser<Variant>,\n ): DiscriminatedUnionBuilder<DK, Union | Variant> {\n const parseNewBranch = discriminatedUnionBranch(\n this.discriminantKey,\n discriminantValue,\n parseNewVariant,\n this.parser,\n );\n\n return new DiscriminatedUnionBuilder(\n this.discriminantKey,\n parseNewBranch,\n );\n }\n}\n\nfunction discriminatedUnionBranch<\n DK extends string,\n DV extends Primitive,\n Variant extends {[k in DK]: DV},\n Rest extends {[k in DK]: DV},\n>(\n discriminantKey: DK,\n discriminantValue: DV,\n parseVariant: Parser<Variant>,\n parseOtherBranches: Parser<Rest>,\n): Parser<Variant | Rest> {\n return (raw: unknown, ctx: ParseContext) => {\n if (!isObject(raw)) {\n return ctx.failure(\"object\", raw);\n }\n\n if (raw[discriminantKey] === discriminantValue) {\n return parseVariant(raw, ctx);\n }\n\n return parseOtherBranches(raw, ctx);\n };\n}\n","import {\n array,\n boolean,\n constant,\n enumeration,\n nullable,\n number,\n object,\n optional,\n pair,\n string,\n union,\n} from \"../general-purpose-parsers\";\nimport {discriminatedUnionOn} from \"../general-purpose-parsers/discriminated-union\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {GrapherWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nconst pairOfNumbers = pair(number, number);\n\nconst pairOfPoints = pair(pairOfNumbers, pairOfNumbers);\n\nexport const parseGrapherWidget: Parser<GrapherWidget> = parseWidget(\n constant(\"grapher\"),\n object({\n availableTypes: array(\n enumeration(\n \"absolute_value\",\n \"exponential\",\n \"linear\",\n \"logarithm\",\n \"quadratic\",\n \"sinusoid\",\n \"tangent\",\n ),\n ),\n correct: discriminatedUnionOn(\"type\")\n .withBranch(\n \"absolute_value\",\n object({\n type: constant(\"absolute_value\"),\n coords: nullable(pairOfPoints),\n }),\n )\n .withBranch(\n \"exponential\",\n object({\n type: constant(\"exponential\"),\n asymptote: pairOfPoints,\n coords: nullable(pairOfPoints),\n }),\n )\n .withBranch(\n \"linear\",\n object({\n type: constant(\"linear\"),\n coords: nullable(pairOfPoints),\n }),\n )\n .withBranch(\n \"logarithm\",\n object({\n type: constant(\"logarithm\"),\n asymptote: pairOfPoints,\n coords: nullable(pairOfPoints),\n }),\n )\n .withBranch(\n \"quadratic\",\n object({\n type: constant(\"quadratic\"),\n coords: nullable(pairOfPoints),\n }),\n )\n .withBranch(\n \"sinusoid\",\n object({\n type: constant(\"sinusoid\"),\n coords: nullable(pairOfPoints),\n }),\n )\n .withBranch(\n \"tangent\",\n object({\n type: constant(\"tangent\"),\n coords: nullable(pairOfPoints),\n }),\n ).parser,\n graph: object({\n backgroundImage: object({\n bottom: optional(number),\n height: optional(number),\n left: optional(number),\n scale: optional(number),\n url: optional(nullable(string)),\n width: optional(number),\n }),\n box: optional(pairOfNumbers),\n editableSettings: optional(\n array(enumeration(\"graph\", \"snap\", \"image\", \"measure\")),\n ),\n gridStep: optional(pairOfNumbers),\n labels: pair(string, string),\n markings: enumeration(\"graph\", \"none\", \"grid\"),\n range: pair(pairOfNumbers, pairOfNumbers),\n rulerLabel: constant(\"\"),\n rulerTicks: number,\n showProtractor: optional(boolean),\n showRuler: optional(boolean),\n showTooltips: optional(boolean),\n snapStep: optional(pairOfNumbers),\n step: pairOfNumbers,\n valid: optional(union(boolean).or(string).parser),\n }),\n }),\n);\n","import {constant} from \"../general-purpose-parsers\";\n\nimport {parsePerseusRenderer} from \"./perseus-renderer\";\nimport {parseWidget} from \"./widget\";\n\nimport type {GroupWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parseGroupWidget: Parser<GroupWidget> = parseWidget(\n constant(\"group\"),\n // This module has an import cycle with parsePerseusRenderer.\n // The anonymous function below ensures that we don't try to access\n // parsePerseusRenderer before it's defined.\n (rawVal, ctx) => parsePerseusRenderer(rawVal, ctx),\n);\n","import {\n array,\n boolean,\n constant,\n number,\n object,\n optional,\n string,\n union,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {IFrameWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parseIframeWidget: Parser<IFrameWidget> = parseWidget(\n constant(\"iframe\"),\n object({\n url: string,\n settings: optional(array(object({name: string, value: string}))),\n width: union(number).or(string).parser,\n height: union(number).or(string).parser,\n allowFullScreen: defaulted(boolean, () => false),\n allowTopNavigation: optional(boolean),\n static: defaulted(boolean, () => false),\n }),\n);\n","import type {PartialParser} from \"../parser-types\";\n\nexport const stringToNumber: PartialParser<string | number, number> = (\n rawValue,\n ctx,\n) => {\n if (typeof rawValue === \"number\") {\n return ctx.success(rawValue);\n }\n\n const parsedNumber = +rawValue;\n if (rawValue === \"\" || isNaN(parsedNumber)) {\n return ctx.failure(\"a number or numeric string\", rawValue);\n }\n\n return ctx.success(parsedNumber);\n};\n","import {\n nullable,\n number,\n object,\n optional,\n pipeParsers,\n string,\n union,\n} from \"../general-purpose-parsers\";\nimport {convert} from \"../general-purpose-parsers/convert\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\nimport {stringToNumber} from \"../general-purpose-parsers/string-to-number\";\n\nimport type {PerseusImageBackground} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nfunction emptyToZero(x: string | number): string | number {\n return x === \"\" ? 0 : x;\n}\n\nconst imageDimensionToNumber = pipeParsers(union(number).or(string).parser)\n // In this specific case, empty string is equivalent to zero. An empty\n // string parses to either NaN (using parseInt) or 0 (using unary +) and\n // CSS will treat NaN as invalid and default to 0 instead.\n .then(convert(emptyToZero))\n .then(stringToNumber).parser;\n\nconst dimensionOrUndefined = defaulted(imageDimensionToNumber, () => undefined);\n\nexport const parsePerseusImageBackground: Parser<PerseusImageBackground> =\n object({\n url: optional(nullable(string)),\n width: dimensionOrUndefined,\n height: dimensionOrUndefined,\n top: dimensionOrUndefined,\n left: dimensionOrUndefined,\n bottom: dimensionOrUndefined,\n scale: dimensionOrUndefined,\n });\n","import {\n array,\n boolean,\n constant,\n number,\n object,\n optional,\n pair,\n string,\n} from \"../general-purpose-parsers\";\n\nimport {parsePerseusImageBackground} from \"./perseus-image-background\";\nimport {parseWidget} from \"./widget\";\n\nimport type {ImageWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nconst pairOfNumbers = pair(number, number);\n\nexport const parseImageWidget: Parser<ImageWidget> = parseWidget(\n constant(\"image\"),\n object({\n title: optional(string),\n caption: optional(string),\n alt: optional(string),\n backgroundImage: parsePerseusImageBackground,\n static: optional(boolean),\n labels: optional(\n array(\n object({\n content: string,\n alignment: string,\n coordinates: array(number),\n }),\n ),\n ),\n range: optional(pair(pairOfNumbers, pairOfNumbers)),\n box: optional(pairOfNumbers),\n }),\n);\n","import {\n boolean,\n constant,\n enumeration,\n number,\n object,\n optional,\n string,\n union,\n} from \"../general-purpose-parsers\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {InputNumberWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nconst booleanToString: Parser<string> = (rawValue, ctx) => {\n if (typeof rawValue === \"boolean\") {\n return ctx.success(String(rawValue));\n }\n return ctx.failure(\"boolean\", rawValue);\n};\n\nexport const parseInputNumberWidget: Parser<InputNumberWidget> = parseWidget(\n constant(\"input-number\"),\n object({\n answerType: optional(\n enumeration(\n \"number\",\n \"decimal\",\n \"integer\",\n \"rational\",\n \"improper\",\n \"mixed\",\n \"percent\",\n \"pi\",\n ),\n ),\n inexact: optional(boolean),\n maxError: optional(union(number).or(string).parser),\n rightAlign: optional(boolean),\n simplify: enumeration(\"required\", \"optional\", \"enforced\"),\n size: enumeration(\"normal\", \"small\"),\n // TODO(benchristel): there are some content items where value is a\n // boolean, even though that makes no sense. We should figure out if\n // those content items are actually published anywhere, and consider\n // updating them.\n value: union(number).or(string).or(booleanToString).parser,\n customKeypad: optional(boolean),\n }),\n);\n","import {\n array,\n boolean,\n constant,\n enumeration,\n number,\n object,\n optional,\n pair,\n pipeParsers,\n string,\n union,\n} from \"../general-purpose-parsers\";\nimport {convert} from \"../general-purpose-parsers/convert\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\nimport {discriminatedUnionOn} from \"../general-purpose-parsers/discriminated-union\";\n\nimport {parsePerseusImageBackground} from \"./perseus-image-background\";\nimport {parseWidget} from \"./widget\";\n\nimport type {\n InteractionWidget,\n PerseusInteractionElement,\n} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nconst pairOfNumbers = pair(number, number);\nconst stringOrEmpty = defaulted(string, () => \"\");\n\nconst parseKey = pipeParsers(optional(string)).then(convert(String)).parser;\n\ntype FunctionElement = Extract<PerseusInteractionElement, {type: \"function\"}>;\nconst parseFunctionElement: Parser<FunctionElement> = object({\n type: constant(\"function\"),\n key: parseKey,\n options: object({\n value: string,\n funcName: string,\n rangeMin: string,\n rangeMax: string,\n color: string,\n strokeDasharray: string,\n strokeWidth: number,\n }),\n});\n\ntype LabelElement = Extract<PerseusInteractionElement, {type: \"label\"}>;\nconst parseLabelElement: Parser<LabelElement> = object({\n type: constant(\"label\"),\n key: parseKey,\n options: object({\n label: string,\n color: string,\n coordX: string,\n coordY: string,\n }),\n});\n\ntype LineElement = Extract<PerseusInteractionElement, {type: \"line\"}>;\nconst parseLineElement: Parser<LineElement> = object({\n type: constant(\"line\"),\n key: parseKey,\n options: object({\n color: string,\n startX: string,\n startY: string,\n endX: string,\n endY: string,\n strokeDasharray: string,\n strokeWidth: number,\n arrows: string,\n }),\n});\n\ntype MovableLineElement = Extract<\n PerseusInteractionElement,\n {type: \"movable-line\"}\n>;\nconst parseMovableLineElement: Parser<MovableLineElement> = object({\n type: constant(\"movable-line\"),\n key: parseKey,\n options: object({\n startX: string,\n startY: string,\n startSubscript: number,\n endX: string,\n endY: string,\n endSubscript: number,\n constraint: string,\n snap: number,\n constraintFn: string,\n constraintXMin: string,\n constraintXMax: string,\n constraintYMin: string,\n constraintYMax: string,\n }),\n});\n\ntype MovablePointElement = Extract<\n PerseusInteractionElement,\n {type: \"movable-point\"}\n>;\nconst parseMovablePointElement: Parser<MovablePointElement> = object({\n type: constant(\"movable-point\"),\n key: parseKey,\n options: object({\n startX: string,\n startY: string,\n varSubscript: number,\n constraint: string,\n snap: number,\n constraintFn: string,\n constraintXMin: stringOrEmpty,\n constraintXMax: stringOrEmpty,\n constraintYMin: stringOrEmpty,\n constraintYMax: stringOrEmpty,\n }),\n});\n\ntype ParametricElement = Extract<\n PerseusInteractionElement,\n {type: \"parametric\"}\n>;\nconst parseParametricElement: Parser<ParametricElement> = object({\n type: constant(\"parametric\"),\n key: parseKey,\n options: object({\n x: string,\n y: string,\n rangeMin: string,\n rangeMax: string,\n color: string,\n strokeDasharray: string,\n strokeWidth: number,\n }),\n});\n\ntype PointElement = Extract<PerseusInteractionElement, {type: \"point\"}>;\nconst parsePointElement: Parser<PointElement> = object({\n type: constant(\"point\"),\n key: parseKey,\n options: object({\n color: string,\n coordX: string,\n coordY: string,\n }),\n});\n\ntype RectangleElement = Extract<PerseusInteractionElement, {type: \"rectangle\"}>;\nconst parseRectangleElement: Parser<RectangleElement> = object({\n type: constant(\"rectangle\"),\n key: parseKey,\n options: object({\n color: string,\n coordX: string,\n coordY: string,\n width: string,\n height: string,\n }),\n});\n\nexport const parseInteractionWidget: Parser<InteractionWidget> = parseWidget(\n constant(\"interaction\"),\n object({\n static: defaulted(boolean, () => false),\n graph: object({\n editableSettings: optional(array(enumeration(\"canvas\", \"graph\"))),\n box: pairOfNumbers,\n labels: array(string),\n range: pair(pairOfNumbers, pairOfNumbers),\n gridStep: pairOfNumbers,\n markings: enumeration(\"graph\", \"grid\", \"none\"),\n snapStep: optional(pairOfNumbers),\n valid: optional(union(boolean).or(string).parser),\n backgroundImage: optional(parsePerseusImageBackground),\n showProtractor: optional(boolean),\n showRuler: optional(boolean),\n rulerLabel: optional(string),\n rulerTicks: optional(number),\n tickStep: pairOfNumbers,\n }),\n elements: array(\n discriminatedUnionOn(\"type\")\n .withBranch(\"function\", parseFunctionElement)\n .withBranch(\"label\", parseLabelElement)\n .withBranch(\"line\", parseLineElement)\n .withBranch(\"movable-line\", parseMovableLineElement)\n .withBranch(\"movable-point\", parseMovablePointElement)\n .withBranch(\"parametric\", parseParametricElement)\n .withBranch(\"point\", parsePointElement)\n .withBranch(\"rectangle\", parseRectangleElement).parser,\n ),\n }),\n);\n","/**\n * The Perseus \"data schema\" file.\n *\n * This file, and the types in it, represents the \"data schema\" that Perseus\n * uses. The @khanacademy/perseus-editor package edits and produces objects\n * that conform to the types in this file. Similarly, the top-level renderers\n * in @khanacademy/perseus, consume objects that conform to these types.\n *\n * WARNING: This file should not import any types from elsewhere so that it is\n * easy to reason about changes that alter the Perseus schema. This helps\n * ensure that it is not changed accidentally when upgrading a dependant\n * package or other part of Perseus code. Note that TypeScript does type\n * checking via something called \"structural typing\". This means that as long\n * as the shape of a type matches, the name it goes by doesn't matter. As a\n * result, a `Coord` type that looks like this `[x: number, y: number]` is\n * _identical_, in TypeScript's eyes, to this `Vector2` type `[x: number, y:\n * number]`. Also, with tuples, the labels for each entry is ignored, so `[x:\n * number, y: number]` is compatible with `[min: number, max: number]`. The\n * labels are for humans, not TypeScript. :)\n *\n * If you make changes to types in this file, be very sure that:\n *\n * a) the changes are backwards compatible. If they are not, old data from\n * previous versions of the \"schema\" could become unrenderable, or worse,\n * introduce hard-to-diagnose bugs.\n * b) the parsing code (`util/parse-perseus-json/`) is updated to handle\n * the new format _as well as_ the old format.\n */\n\n// TODO(FEI-4010): Remove `Perseus` prefix for all types here\n\nexport type Coord = [x: number, y: number];\nexport type Interval = [min: number, max: number];\nexport type Vector2 = Coord; // Same name as Mafs\nexport type Range = Interval;\nexport type Size = [width: number, height: number];\nexport type CollinearTuple = [Vector2, Vector2];\nexport type ShowSolutions = \"all\" | \"selected\" | \"none\";\n\n/**\n * A utility type that constructs a widget map from a \"registry interface\".\n * The keys of the registry should be the widget type (aka, \"categorizer\" or\n * \"radio\", etc) and the value should be the option type stored in the value\n * of the map.\n *\n * You can think of this as a type that generates another type. We use\n * \"registry interfaces\" as a way to keep a set of widget types to their data\n * type in several places in Perseus. This type then allows us to generate a\n * map type that maps a widget id to its data type and keep strong typing by\n * widget id.\n *\n * For example, given a fictitious registry such as this:\n *\n * ```\n * interface DummyRegistry {\n * categorizer: { categories: ReadonlyArray<string> };\n * dropdown: { choices: ReadonlyArray<string> }:\n * }\n * ```\n *\n * If we create a DummyMap using this helper:\n *\n * ```\n * type DummyMap = MakeWidgetMap<DummyRegistry>;\n * ```\n *\n * We'll get a map that looks like this:\n *\n * ```\n * type DummyMap = {\n * `categorizer ${number}`: { categories: ReadonlyArray<string> };\n * `dropdown ${number}`: { choices: ReadonlyArray<string> };\n * }\n * ```\n *\n * We use interfaces for the registries so that they can be extended in cases\n * where the consuming app brings along their own widgets. Interfaces in\n * TypeScript are always open (ie. you can extend them) whereas types aren't.\n */\nexport type MakeWidgetMap<TRegistry> = {\n [Property in keyof TRegistry as `${Property & string} ${number}`]: TRegistry[Property];\n};\n\n/**\n * Our core set of Perseus widgets.\n *\n * This interface is the basis for \"registering\" all Perseus widget types.\n * There should be one key/value pair for each supported widget. If you create\n * a new widget, an entry should be added to this interface. Note that this\n * only registers the widget options type, you'll also need to register the\n * widget so that it's available at runtime (@see\n * {@link file://./widgets.ts#registerWidget}).\n *\n * Importantly, the key should be the name that is used in widget IDs. For most\n * widgets that is the same as the widget option's `type` field. In cases where\n * a widget has been deprecated and replaced with the deprecated-standin\n * widget, it should be the original widget type!\n *\n * If you define the widget outside of this package, you can still add the new\n * widget to this interface by writing the following in that package that\n * contains the widget. TypeScript will merge that definition of the\n * `PerseusWidgets` with the one defined below.\n *\n * ```typescript\n * declare module \"@khanacademy/perseus-core\" {\n * interface PerseusWidgetTypes {\n * // A new widget\n * \"new-awesomeness\": MyAwesomeNewWidget;\n *\n * // A deprecated widget\n * \"super-old-widget\": DeprecatedStandinWidget;\n * }\n * }\n *\n * // The new widget's options definition\n * type MyAwesomeNewWidget = WidgetOptions<'new-awesomeness', MyAwesomeNewWidgetOptions>;\n *\n * // The deprecated widget's options definition\n * type SuperOldWidget = WidgetOptions<'super-old-widget', object>;\n * ```\n *\n * This interface can be extended through the magic of TypeScript \"Declaration\n * merging\". Specifically, we augment this module and extend this interface.\n *\n * @see {@link https://www.typescriptlang.org/docs/handbook/declaration-merging.html#module-augmentation}\n */\nexport interface PerseusWidgetTypes {\n categorizer: CategorizerWidget;\n \"cs-program\": CSProgramWidget;\n definition: DefinitionWidget;\n dropdown: DropdownWidget;\n explanation: ExplanationWidget;\n expression: ExpressionWidget;\n grapher: GrapherWidget;\n \"graded-group-set\": GradedGroupSetWidget;\n \"graded-group\": GradedGroupWidget;\n group: GroupWidget;\n iframe: IFrameWidget;\n image: ImageWidget;\n \"input-number\": InputNumberWidget;\n interaction: InteractionWidget;\n \"interactive-graph\": InteractiveGraphWidget;\n \"label-image\": LabelImageWidget;\n matcher: MatcherWidget;\n matrix: MatrixWidget;\n measurer: MeasurerWidget;\n \"molecule-renderer\": MoleculeRendererWidget;\n \"number-line\": NumberLineWidget;\n \"numeric-input\": NumericInputWidget;\n orderer: OrdererWidget;\n \"passage-ref-target\": RefTargetWidget;\n \"passage-ref\": PassageRefWidget;\n passage: PassageWidget;\n \"phet-simulation\": PhetSimulationWidget;\n \"python-program\": PythonProgramWidget;\n plotter: PlotterWidget;\n radio: RadioWidget;\n sorter: SorterWidget;\n table: TableWidget;\n video: VideoWidget;\n\n // Deprecated widgets\n \"lights-puzzle\": DeprecatedStandinWidget;\n sequence: DeprecatedStandinWidget;\n simulator: DeprecatedStandinWidget;\n transformer: DeprecatedStandinWidget;\n}\n\n/**\n * A map of widget IDs to widget options. This is most often used as the type\n * for a set of widgets defined in a `PerseusItem` but can also be useful to\n * represent a function parameter where only `widgets` from a `PerseusItem` are\n * needed. Today Widget IDs are made up of the widget type and an incrementing\n * integer (eg. `interactive-graph 1` or `radio 3`). It is suggested to avoid\n * reading/parsing the widget id to derive any information from it, except in\n * the case of this map.\n *\n * @see {@link PerseusWidgetTypes} additional widgets can be added to this map type\n * by augmenting the PerseusWidgetTypes with new widget types!\n */\nexport type PerseusWidgetsMap = MakeWidgetMap<PerseusWidgetTypes>;\n\n/**\n * PerseusWidget is a union of all the different types of widget options that\n * Perseus knows about.\n *\n * Thanks to it being based on PerseusWidgetTypes interface, this union is\n * automatically extended to include widgets used in tests without those widget\n * option types seeping into our production types.\n *\n * @see MockWidget for an example\n */\nexport type PerseusWidget = PerseusWidgetTypes[keyof PerseusWidgetTypes];\n\n/**\n * A \"PerseusItem\" is a classic Perseus item. It is rendered by the\n * `ServerItemRenderer` and the layout is pre-set.\n *\n * To render more complex Perseus items, see the `Item` type in the multi item\n * area.\n */\nexport type PerseusItem = {\n // The details of the question being asked to the user.\n question: PerseusRenderer;\n // A collection of hints to be offered to the user that support answering the question.\n hints: ReadonlyArray<Hint>;\n // Details about the tools the user might need to answer the question\n answerArea: PerseusAnswerArea | null | undefined;\n /**\n * The version of the item.\n * @deprecated Not used.\n */\n itemDataVersion: any;\n /**\n * @deprecated Superseded by per-widget answers.\n */\n answer: any;\n};\n\n/**\n * A \"PerseusArticle\" is an item that is meant to be rendered as an article.\n * This item is never scored and is rendered by the `ArticleRenderer`.\n */\nexport type PerseusArticle = PerseusRenderer | ReadonlyArray<PerseusRenderer>;\n\nexport type Version = {\n // The major part of the version\n major: number;\n // The minor part of the version\n minor: number;\n};\n\nexport type PerseusRenderer = {\n /**\n * Translatable Markdown content to be rendered. May include references to\n * widgets (as [[☃ widgetName]]) or images (as ![image text](imageUrl)).\n * For each image found in this content, there can be an entry in the\n * `images` dict (below) with the key being the image's url which defines\n * additional attributes for the image.\n */\n content: string;\n /**\n * A dictionary of {[widgetName]: Widget} to be referenced from the content\n * field.\n */\n widgets: PerseusWidgetsMap;\n /**\n * Formerly used in the PerseusGradedGroup widget. A list of \"tags\" that\n * are keys that represent other content in the system. Not rendered to\n * the user. NOTE: perseus_data.go says this is required even though it\n * isn't necessary.\n * @deprecated\n */\n metadata?: any;\n /**\n * A dictionary of {[imageUrl]: PerseusImageDetail}.\n */\n images: {\n [imageUrl: string]: PerseusImageDetail;\n };\n};\n\nexport type Hint = PerseusRenderer & {\n /**\n * When `true`, causes the previous hint to be replaced with this hint when\n * displayed. When `false`, the previous hint remains visible when this one\n * is displayed. This allows for hints that build upon each other.\n */\n replace?: boolean;\n};\n\nexport type PerseusImageDetail = {\n // The width of the image\n width: number;\n // the height of the image\n height: number;\n};\n\nexport const ItemExtras = [\n // The user might benefit from using a Scientific Calculator. Provided on Khan Academy when true\n \"calculator\",\n // The user might benefit from using a statistics Chi Squared Table like https://people.richland.edu/james/lecture/m170/tbl-chi.html\n \"chi2Table\",\n // The user might benefit from a monthly payments calculator. Provided on Khan Academy when true\n \"financialCalculatorMonthlyPayment\",\n // The user might benefit from a total amount calculator. Provided on Khan Academy when true\n \"financialCalculatorTotalAmount\",\n // The user might benefit from a time to pay off calculator. Provided on Khan Academy when true\n \"financialCalculatorTimeToPayOff\",\n // The user might benefit from using a Periodic Table of Elements. Provided on Khan Academy when true\n \"periodicTable\",\n // The user might benefit from using a Periodic Table of Elements with key. Provided on Khan Academy when true\n \"periodicTableWithKey\",\n // The user might benefit from using a statistics T Table like https://www.statisticshowto.com/tables/t-distribution-table/\n \"tTable\",\n // The user might benefit from using a statistics Z Table like https://www.ztable.net/\n \"zTable\",\n] as const;\nexport type PerseusAnswerArea = Record<(typeof ItemExtras)[number], boolean>;\n\n/**\n * The type representing the common structure of all widget's options. The\n * `Options` generic type represents the widget-specific option data.\n */\nexport type WidgetOptions<Type extends string, Options> = {\n // The \"type\" of widget which will define what the Options field looks like\n type: Type;\n // Whether this widget is displayed with the values and is immutable. For display only\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n static?: boolean;\n // Whether a widget is scored. Usually true except for IFrame widgets (deprecated)\n // Default: true\n graded?: boolean;\n // The HTML alignment of the widget. \"default\" or \"block\"\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n alignment?: string;\n // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details\n options: Options;\n // Only used by interactive child widgets (line, point, etc) to identify the components\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n key?: number | null;\n // The version of the widget data spec. Used to differentiate between newer and older content data.\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n version?: Version;\n};\n\n// prettier-ignore\nexport type CategorizerWidget = WidgetOptions<'categorizer', PerseusCategorizerWidgetOptions>;\n// prettier-ignore\nexport type CSProgramWidget = WidgetOptions<'cs-program', PerseusCSProgramWidgetOptions>;\n// prettier-ignore\nexport type DefinitionWidget = WidgetOptions<'definition', PerseusDefinitionWidgetOptions>;\n// prettier-ignore\nexport type DropdownWidget = WidgetOptions<'dropdown', PerseusDropdownWidgetOptions>;\n// prettier-ignore\nexport type ExplanationWidget = WidgetOptions<'explanation', PerseusExplanationWidgetOptions>;\n// prettier-ignore\nexport type ExpressionWidget = WidgetOptions<'expression', PerseusExpressionWidgetOptions>;\n// prettier-ignore\nexport type GradedGroupSetWidget = WidgetOptions<'graded-group-set', PerseusGradedGroupSetWidgetOptions>;\n// prettier-ignore\nexport type GradedGroupWidget = WidgetOptions<'graded-group', PerseusGradedGroupWidgetOptions>;\n// prettier-ignore\nexport type GrapherWidget = WidgetOptions<'grapher', PerseusGrapherWidgetOptions>;\n// prettier-ignore\nexport type GroupWidget = WidgetOptions<'group', PerseusGroupWidgetOptions>;\n// prettier-ignore\nexport type IFrameWidget = WidgetOptions<'iframe', PerseusIFrameWidgetOptions>;\n// prettier-ignore\nexport type ImageWidget = WidgetOptions<'image', PerseusImageWidgetOptions>;\n// prettier-ignore\nexport type InteractionWidget = WidgetOptions<'interaction', PerseusInteractionWidgetOptions>;\n// prettier-ignore\nexport type InteractiveGraphWidget = WidgetOptions<'interactive-graph', PerseusInteractiveGraphWidgetOptions>;\n// prettier-ignore\nexport type LabelImageWidget = WidgetOptions<'label-image', PerseusLabelImageWidgetOptions>;\n// prettier-ignore\nexport type MatcherWidget = WidgetOptions<'matcher', PerseusMatcherWidgetOptions>;\n// prettier-ignore\nexport type MatrixWidget = WidgetOptions<'matrix', PerseusMatrixWidgetOptions>;\n// prettier-ignore\nexport type MeasurerWidget = WidgetOptions<'measurer', PerseusMeasurerWidgetOptions>;\n// prettier-ignore\nexport type NumberLineWidget = WidgetOptions<'number-line', PerseusNumberLineWidgetOptions>;\n// prettier-ignore\nexport type NumericInputWidget = WidgetOptions<'numeric-input', PerseusNumericInputWidgetOptions>;\n// prettier-ignore\nexport type OrdererWidget = WidgetOptions<'orderer', PerseusOrdererWidgetOptions>;\n// prettier-ignore\nexport type PassageRefWidget = WidgetOptions<'passage-ref', PerseusPassageRefWidgetOptions>;\n// prettier-ignore\nexport type PassageWidget = WidgetOptions<'passage', PerseusPassageWidgetOptions>;\n// prettier-ignore\nexport type PhetSimulationWidget = WidgetOptions<'phet-simulation', PerseusPhetSimulationWidgetOptions>;\n// prettier-ignore\nexport type PlotterWidget = WidgetOptions<'plotter', PerseusPlotterWidgetOptions>;\n// prettier-ignore\nexport type PythonProgramWidget = WidgetOptions<'python-program', PerseusPythonProgramWidgetOptions>;\n// prettier-ignore\nexport type RadioWidget = WidgetOptions<'radio', PerseusRadioWidgetOptions>;\n// prettier-ignore\nexport type SorterWidget = WidgetOptions<'sorter', PerseusSorterWidgetOptions>;\n// prettier-ignore\nexport type TableWidget = WidgetOptions<'table', PerseusTableWidgetOptions>;\n// prettier-ignore\nexport type InputNumberWidget = WidgetOptions<'input-number', PerseusInputNumberWidgetOptions>;\n// prettier-ignore\nexport type MoleculeRendererWidget = WidgetOptions<'molecule-renderer', PerseusMoleculeRendererWidgetOptions>;\n// prettier-ignore\nexport type RefTargetWidget = WidgetOptions<'passage-ref-target', PerseusPassageRefTargetWidgetOptions>;\n// prettier-ignore\nexport type VideoWidget = WidgetOptions<'video', PerseusVideoWidgetOptions>;\n//prettier-ignore\nexport type DeprecatedStandinWidget = WidgetOptions<'deprecated-standin', object>;\n\n/**\n * A background image applied to various widgets.\n */\nexport type PerseusImageBackground = {\n // The URL of the image\n url: string | null | undefined;\n // The width of the image\n width?: number;\n // The height of the image\n height?: number;\n // The top offset of the image\n // NOTE: perseus_data.go says this is required, but nullable, even though\n // it isn't necessary at all.\n top?: number;\n // The left offset of the image\n // NOTE: perseus_data.go says this is required, but nullable, even though\n // it isn't necessary at all.\n left?: number;\n // The scale of the image\n // NOTE: perseus_data.go says this is required, but nullable, even though\n // it isn't necessary at all.\n scale?: number;\n // The bottom offset of the image\n // NOTE: perseus_data.go says this is required, but nullable, even though\n // it isn't necessary at all.\n bottom?: number;\n};\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 */\nexport type MarkingsType = \"axes\" | \"graph\" | \"grid\" | \"none\";\n\nexport type PerseusCategorizerWidgetOptions = {\n // Translatable text; a list of items to categorize. e.g. [\"banana\", \"yellow\", \"apple\", \"purple\", \"shirt\"]\n items: ReadonlyArray<string>;\n // Translatable text; a list of categories. e.g. [\"fruits\", \"colors\", \"clothing\"]\n categories: ReadonlyArray<string>;\n // Whether the items should be randemized\n randomizeItems: boolean;\n // Whether this widget is displayed with the results and immutable\n static: boolean;\n // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2]\n values: ReadonlyArray<number>;\n // Whether we should highlight i18n linter errors found on this widget\n highlightLint?: boolean;\n // Internal editor configuration. Can be ignored by consumers.\n linterContext?: PerseusLinterContext;\n};\n\nexport type PerseusLinterContext = {\n contentType: string;\n paths: ReadonlyArray<string>;\n stack: ReadonlyArray<string>;\n};\n\nexport type PerseusDefinitionWidgetOptions = {\n // Translatable text; the word to define. e.g. \"vertex\"\n togglePrompt: string;\n // Translatable text; the definition of the word. e.g. \"where 2 rays connect\"\n definition: string;\n // Always false. Not used for this widget\n static: boolean;\n};\n\nexport type PerseusDropdownWidgetOptions = {\n // A list of choices for the dropdown\n choices: ReadonlyArray<PerseusDropdownChoice>;\n // Translatable Text; placeholder text for a dropdown. e.g. \"Please select a fruit\"\n placeholder: string;\n // Always false. Not used for this widget\n static: boolean;\n // Translatable Text; visible label for the dropdown\n visibleLabel?: string;\n // Translatable Text; aria label that screen readers will read\n ariaLabel?: string;\n};\n\nexport type PerseusDropdownChoice = {\n // Translatable text; The text for the option. e.g. \"Banana\" or \"Orange\"\n content: string;\n // Whether this is the correct option or not\n correct: boolean;\n};\n\nexport type PerseusExplanationWidgetOptions = {\n // Translatable Text; The clickable text to expand an explanation. e.g. \"What is an apple?\"\n showPrompt: string;\n // Translatable Text; The cliclable text to hide an explanation. e.g. \"Thanks. I got it!\"\n hidePrompt: string;\n // Translatable Markdown; The explanation that is shown when showPrompt is clicked. e.g. \"An apple is a tasty fruit.\"\n explanation: string;\n // explanation fields can embed widgets. When they do, the details of the widgets are here.\n widgets: PerseusWidgetsMap;\n // Always false. Not used for this widget\n static: boolean;\n};\n\nexport type LegacyButtonSets = ReadonlyArray<\n | \"basic\"\n | \"basic+div\"\n | \"trig\"\n | \"prealgebra\"\n | \"logarithms\"\n | \"basic relations\"\n | \"advanced relations\"\n | \"scientific\"\n>;\n\nexport type PerseusExpressionWidgetOptions = {\n // The expression forms the answer may come in\n answerForms: ReadonlyArray<PerseusExpressionAnswerForm>;\n buttonSets: LegacyButtonSets;\n // Variables that can be used as functions. Default: [\"f\", \"g\", \"h\"]\n functions: ReadonlyArray<string>;\n // Use x for rendering multiplication instead of a center dot.\n times: boolean;\n // visible label associated with the MathQuill field\n visibleLabel?: string;\n // aria label for screen readers attached to MathQuill field\n ariaLabel?: string;\n // Controls when buttons for special characters are visible when using a\n // desktop browser. Defaults to \"focused\".\n // NOTE: This isn't listed in perseus-format.js or perseus_data.go, but\n // appears in item data in the datastore.\n buttonsVisible?: \"always\" | \"never\" | \"focused\";\n};\n\nexport const PerseusExpressionAnswerFormConsidered = [\n \"correct\",\n \"wrong\",\n \"ungraded\",\n] as const;\n\nexport type PerseusExpressionAnswerForm = {\n // The TeX form of the expression. e.g. \"x\\\\cdot3=y\"\n value: string;\n // The Answer expression must have the same form\n form: boolean;\n // The answer expression must be fully expanded and simplified\n simplify: boolean;\n // Whether the form is considered \"correct\", \"wrong\", or \"ungraded\"\n considered: (typeof PerseusExpressionAnswerFormConsidered)[number];\n // A key to identify the answer form in a list\n // NOTE: perseus-format.js says this is required even though it isn't necessary.\n key?: string;\n};\n\nexport type PerseusGradedGroupWidgetOptions = {\n // Translatable Text; A title to be displayed for the group.\n title: string;\n // Not used in Perseus (but is set in (en, pt) production data)\n hasHint?: boolean | null | undefined;\n // A section to define hints for the group.\n hint?: PerseusRenderer | null | undefined;\n // Translatable Markdown. May include widgets and images embedded.\n content: string;\n // See PerseusRenderer.widgets\n widgets: PerseusWidgetsMap;\n // Not used in Perseus\n widgetEnabled?: boolean | null | undefined;\n // Not used in Perseus\n immutableWidgets?: boolean | null | undefined;\n // See PerseusRenderer.images\n images: {\n [key: string]: PerseusImageDetail;\n };\n};\n\nexport type PerseusGradedGroupSetWidgetOptions = {\n // A list of Widget Groups\n gradedGroups: ReadonlyArray<PerseusGradedGroupWidgetOptions>;\n};\n\n// 2D range: xMin, xMax, yMin, yMax\nexport type GraphRange = [\n x: [min: number, max: number],\n y: [min: number, max: number],\n];\n\nexport type GrapherAnswerTypes =\n | {\n type: \"absolute_value\";\n // If `coords` is null, the graph will not be gradable. All answers\n // will be scored as invalid.\n coords: null | [vertex: Coord, secondPoint: Coord];\n }\n | {\n type: \"exponential\";\n // Two points along the asymptote line. Usually (always?) a\n // horizontal or vertical line.\n asymptote: [Coord, Coord];\n // Two points along the exponential curve. One end of the curve\n // trends towards the asymptote.\n // If `coords` is null, the graph will not be gradable. All answers\n // will be scored as invalid.\n coords: null | [Coord, Coord];\n }\n | {\n type: \"linear\";\n // Two points along the straight line\n // If coords is null, the graph will not be gradable. All answers\n // will be scored as invalid.\n coords: null | [Coord, Coord];\n }\n | {\n type: \"logarithm\";\n // Two points along the asymptote line.\n asymptote: [Coord, Coord];\n // Two points along the logarithmic curve. One end of the curve\n // trends towards the asymptote.\n // If coords is null, the graph will not be gradable. All answers\n // will be scored as invalid.\n coords: null | [Coord, Coord];\n }\n | {\n type: \"quadratic\";\n // If coords is null, the graph will not be gradable. All answers\n // will be scored as invalid.\n coords: null | [vertex: Coord, secondPoint: Coord];\n }\n | {\n type: \"sinusoid\";\n // Two points on the same slope in the sinusoid wave line.\n // If coords is null, the graph will not be gradable. All answers\n // will be scored as invalid.\n coords: null | [Coord, Coord];\n }\n | {\n type: \"tangent\";\n // Two points on the same slope in the tangent wave line.\n // If coords is null, the graph will not be gradable. All answers\n // will be scored as invalid.\n coords: null | [Coord, Coord];\n };\n\nexport type PerseusGrapherWidgetOptions = {\n availableTypes: ReadonlyArray<\n | \"absolute_value\"\n | \"exponential\"\n | \"linear\"\n | \"logarithm\"\n | \"quadratic\"\n | \"sinusoid\"\n | \"tangent\"\n >;\n correct: GrapherAnswerTypes;\n graph: {\n backgroundImage: {\n bottom?: number;\n height?: number;\n left?: number;\n scale?: number;\n url?: string | null | undefined;\n width?: number;\n };\n box?: [number, number];\n editableSettings?: ReadonlyArray<\n \"graph\" | \"snap\" | \"image\" | \"measure\"\n >;\n gridStep?: [number, number];\n labels: [string, string];\n markings: MarkingsType;\n range: GraphRange;\n rulerLabel: \"\";\n rulerTicks: number;\n showProtractor?: boolean;\n showRuler?: boolean;\n showTooltips?: boolean;\n snapStep?: [number, number];\n step: [number, number];\n valid?: boolean | string;\n };\n};\n\nexport type PerseusGroupWidgetOptions = PerseusRenderer;\n\nexport type PerseusImageWidgetOptions = {\n // Translatable Markdown; Text to be shown for the title of the image\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n title?: string;\n // Translatable Markdown; Text to be shown in the caption section of an image\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n caption?: string;\n // Translatable Text; The alt text to be shown in the img.alt attribute\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n alt?: string;\n // The image details for the image to be displayed\n backgroundImage: PerseusImageBackground;\n // Always false. Not used for this widget\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n static?: boolean;\n // A list of labels to display on the image\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n labels?: ReadonlyArray<PerseusImageLabel>;\n // The range on the image render for labels\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n range?: [Interval, Interval];\n // The box on the image render for labels. The same as backgroundImage.width and backgroundImage.height\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n box?: Size;\n};\n\nexport type PerseusImageLabel = {\n // Translatable Text; The content of the label to display\n content: string;\n // The visual alignment of the label. default: \"center\"\n alignment: string;\n // The point on the image to display the label\n coordinates: ReadonlyArray<number>;\n};\n\nexport type PerseusInteractiveGraphWidgetOptions = {\n // Where the little black axis lines & labels (ticks) should render.\n // Also known as the tick step. default [1, 1]\n // NOTE(kevinb): perseus_data.go defines this as Array<number>\n step: [number, number];\n // Where the grid lines on the graph will render. default [1, 1]\n // NOTE(kevinb): perseus_data.go defines this as Array<number>\n gridStep?: [x: number, y: number];\n // Where the graph points will lock to when they are dragged. default [0.5, 0.5]\n // NOTE(kevinb): perseus_data.go defines this as Array<number>\n snapStep?: [x: number, y: number];\n // An optional image to use in the background\n backgroundImage?: PerseusImageBackground;\n /**\n * The type of markings to display on the graph.\n */\n markings: MarkingsType;\n // How to label the X and Y axis. default: [\"x\", \"y\"]\n labels?: ReadonlyArray<string>;\n // Whether to show the Protractor tool overlayed on top of the graph\n showProtractor: boolean;\n /**\n * Whether to show the Ruler tool overlayed on top of the graph.\n * @deprecated - no longer used by the InteractiveGraph widget. The\n * property is kept on this type to prevent its accidental reuse in future\n * features, since it may appear in production data.\n */\n showRuler?: boolean;\n // Whether to show tooltips on the graph\n showTooltips?: boolean;\n /**\n * The unit to show on the ruler. e.g. \"mm\", \"cm\", \"m\", \"km\", \"in\", \"ft\",\n * \"yd\", \"mi\".\n * @deprecated - no longer used by the InteractiveGraph widget. The\n * property is kept on this type to prevent its accidental reuse in future\n * features, since it may appear in production data.\n */\n rulerLabel?: string;\n /**\n * How many ticks to show on the ruler. e.g. 1, 2, 4, 8, 10, 16. Must be\n * an integer.\n * @deprecated - no longer used by the InteractiveGraph widget. The\n * property is kept on this type to prevent its accidental reuse in future\n * features, since it may appear in production data.\n */\n rulerTicks?: number;\n // The X and Y coordinate ranges for the view of the graph. default: [[-10, 10], [-10, 10]]\n // NOTE(kevinb): perseus_data.go defines this as Array<Array<number>>\n // TODO(kevinb): Add a transform function to interactive-graph.jsx to\n // rename `range` to `ranges` so that things are less confusing.\n range: GraphRange;\n // The type of graph\n graph: PerseusGraphType;\n // The correct kind of graph, if being used to select function type\n // TODO(LEMS-2344): make the type of `correct` more specific\n correct: PerseusGraphType;\n // Shapes (points, chords, etc) displayed on the graph that cannot\n // be moved by the user.\n lockedFigures?: ReadonlyArray<LockedFigure>;\n // Aria label that applies to the entire graph.\n fullGraphAriaLabel?: string;\n // Aria description that applies to the entire graph.\n fullGraphAriaDescription?: string;\n};\n\nexport const lockedFigureColorNames = [\n \"blue\",\n \"green\",\n \"grayH\",\n \"purple\",\n \"pink\",\n \"orange\",\n \"red\",\n] as const;\n\nexport type LockedFigureColor = (typeof lockedFigureColorNames)[number];\n\nexport const lockedFigureColors: Record<LockedFigureColor, string> = {\n blue: \"#3D7586\",\n green: \"#447A53\",\n grayH: \"#3B3D45\",\n purple: \"#594094\",\n pink: \"#B25071\",\n red: \"#D92916\",\n orange: \"#946700\",\n} as const;\n\nexport type LockedFigure =\n | LockedPointType\n | LockedLineType\n | LockedVectorType\n | LockedEllipseType\n | LockedPolygonType\n | LockedFunctionType\n | LockedLabelType;\nexport type LockedFigureType = LockedFigure[\"type\"];\n\nexport type LockedLineStyle = \"solid\" | \"dashed\";\n\nexport type LockedPointType = {\n type: \"point\";\n coord: Coord;\n color: LockedFigureColor;\n filled: boolean;\n labels?: LockedLabelType[];\n ariaLabel?: string;\n};\n\nexport type LockedLineType = {\n type: \"line\";\n kind: \"line\" | \"ray\" | \"segment\";\n points: [point1: LockedPointType, point2: LockedPointType];\n color: LockedFigureColor;\n lineStyle: LockedLineStyle;\n showPoint1: boolean;\n showPoint2: boolean;\n labels?: LockedLabelType[];\n ariaLabel?: string;\n};\n\nexport type LockedVectorType = {\n type: \"vector\";\n points: [tail: Coord, tip: Coord];\n color: LockedFigureColor;\n labels?: LockedLabelType[];\n ariaLabel?: string;\n};\n\nexport type LockedFigureFillType = \"none\" | \"white\" | \"translucent\" | \"solid\";\nexport const lockedFigureFillStyles: Record<LockedFigureFillType, number> = {\n none: 0,\n white: 1,\n translucent: 0.4,\n solid: 1,\n} as const;\n\nexport type LockedEllipseType = {\n type: \"ellipse\";\n center: Coord;\n radius: [x: number, y: number];\n angle: number;\n color: LockedFigureColor;\n fillStyle: LockedFigureFillType;\n strokeStyle: LockedLineStyle;\n labels?: LockedLabelType[];\n ariaLabel?: string;\n};\n\nexport type LockedPolygonType = {\n type: \"polygon\";\n points: ReadonlyArray<Coord>;\n color: LockedFigureColor;\n showVertices: boolean;\n fillStyle: LockedFigureFillType;\n strokeStyle: LockedLineStyle;\n labels?: LockedLabelType[];\n ariaLabel?: string;\n};\n\nexport type LockedFunctionType = {\n type: \"function\";\n color: LockedFigureColor;\n strokeStyle: LockedLineStyle;\n /**\n * This is the user-defined equation (as it was typed)\n */\n equation: string;\n /**\n * The independent variable of this function\n */\n directionalAxis: \"x\" | \"y\";\n /**\n * The minimum and maximum values along the `directionalAxis` at which\n * this function should be graphed. Values of -Infinity and Infinity are\n * allowed. Note that infinite values are serialized as `null` in JSON.\n */\n domain: [min: number, max: number];\n labels?: LockedLabelType[];\n ariaLabel?: string;\n};\n\n// Not associated with a specific figure\nexport type LockedLabelType = {\n type: \"label\";\n coord: Coord;\n // TeX-supported string\n text: string;\n color: LockedFigureColor;\n size: \"small\" | \"medium\" | \"large\";\n};\n\nexport type PerseusGraphType =\n | PerseusGraphTypeAngle\n | PerseusGraphTypeCircle\n | PerseusGraphTypeLinear\n | PerseusGraphTypeLinearSystem\n | PerseusGraphTypeNone\n | PerseusGraphTypePoint\n | PerseusGraphTypePolygon\n | PerseusGraphTypeQuadratic\n | PerseusGraphTypeRay\n | PerseusGraphTypeSegment\n | PerseusGraphTypeSinusoid;\n\ntype PerseusGraphTypeCommon = {\n // NOTE(jeremy): This is referenced in the component. Verify if there's any\n // production data that still has this.\n coord?: Coord; // Legacy!\n};\n\nexport type PerseusGraphTypeAngle = {\n type: \"angle\";\n // Whether to show the angle measurements. default: false\n showAngles?: boolean;\n // Allow Reflex Angles if an \"angle\" type. default: true\n allowReflexAngles?: boolean;\n // The angle offset in degrees if an \"angle\" type. default: 0\n angleOffsetDeg?: number;\n // Snap to degree increments if an \"angle\" type. default: 1\n snapDegrees?: number;\n // How to match the answer. If missing, defaults to exact matching.\n match?: \"congruent\";\n // must have 3 coords - ie [Coord, Coord, Coord]\n coords?: [Coord, Coord, Coord] | null;\n // The initial coordinates the graph renders with.\n startCoords?: [Coord, Coord, Coord];\n};\n\nexport type PerseusGraphTypeCircle = {\n type: \"circle\";\n center?: Coord;\n radius?: number;\n // The initial coordinates the graph renders with.\n startCoords?: {\n center: Coord;\n radius: number;\n };\n} & PerseusGraphTypeCommon;\n\nexport type PerseusGraphTypeLinear = {\n type: \"linear\";\n // expects 2 coords\n coords?: CollinearTuple | null;\n // The initial coordinates the graph renders with.\n startCoords?: CollinearTuple;\n} & PerseusGraphTypeCommon;\n\nexport type PerseusGraphTypeLinearSystem = {\n type: \"linear-system\";\n // expects 2 sets of 2 coords\n coords?: CollinearTuple[] | null;\n // The initial coordinates the graph renders with.\n startCoords?: CollinearTuple[];\n} & PerseusGraphTypeCommon;\n\nexport type PerseusGraphTypeNone = {\n type: \"none\";\n};\n\nexport type PerseusGraphTypePoint = {\n type: \"point\";\n // The number of points if a \"point\" type. default: 1. \"unlimited\" if no limit\n numPoints?: number | \"unlimited\";\n coords?: ReadonlyArray<Coord> | null;\n // The initial coordinates the graph renders with.\n startCoords?: ReadonlyArray<Coord>;\n} & PerseusGraphTypeCommon;\n\nexport type PerseusGraphTypePolygon = {\n type: \"polygon\";\n // The number of sides. default: 3. \"unlimited\" if no limit\n numSides?: number | \"unlimited\";\n // Whether to the angle measurements. default: false\n showAngles?: boolean;\n // Whether to show side measurements. default: false\n showSides?: boolean;\n // How to snap points. e.g. \"grid\", \"angles\", or \"sides\". default: grid\n snapTo?: \"grid\" | \"angles\" | \"sides\";\n // How to match the answer. If missing, defaults to exact matching.\n match?: \"similar\" | \"congruent\" | \"approx\" | \"exact\";\n coords?: ReadonlyArray<Coord> | null;\n // The initial coordinates the graph renders with.\n startCoords?: ReadonlyArray<Coord>;\n} & PerseusGraphTypeCommon;\n\nexport type PerseusGraphTypeQuadratic = {\n type: \"quadratic\";\n // expects a list of 3 coords\n coords?: [Coord, Coord, Coord] | null;\n // The initial coordinates the graph renders with.\n startCoords?: [Coord, Coord, Coord];\n} & PerseusGraphTypeCommon;\n\nexport type PerseusGraphTypeSegment = {\n type: \"segment\";\n // The number of segments if a \"segment\" type. default: 1. Max: 6\n numSegments?: number;\n // Expects a list of Coord tuples. Length should match the `numSegments` value.\n coords?: CollinearTuple[] | null;\n // The initial coordinates the graph renders with.\n startCoords?: CollinearTuple[];\n} & PerseusGraphTypeCommon;\n\nexport type PerseusGraphTypeSinusoid = {\n type: \"sinusoid\";\n // Expects a list of 2 Coords\n coords?: ReadonlyArray<Coord> | null;\n // The initial coordinates the graph renders with.\n startCoords?: ReadonlyArray<Coord>;\n} & PerseusGraphTypeCommon;\n\nexport type PerseusGraphTypeRay = {\n type: \"ray\";\n // Expects a list of 2 Coords\n coords?: CollinearTuple | null;\n // The initial coordinates the graph renders with.\n startCoords?: CollinearTuple;\n} & PerseusGraphTypeCommon;\n\ntype AngleGraphCorrect = {\n type: \"angle\";\n allowReflexAngles: boolean;\n match?: \"congruent\";\n coords: [Coord, Coord, Coord];\n};\n\ntype CircleGraphCorrect = {\n type: \"circle\";\n center: Coord;\n radius: number;\n};\n\ntype LinearGraphCorrect = {\n type: \"linear\";\n coords: CollinearTuple;\n};\n\ntype LinearSystemGraphCorrect = {\n type: \"linear-system\";\n coords: [CollinearTuple, CollinearTuple];\n};\n\ntype NoneGraphCorrect = {\n type: \"none\";\n};\n\ntype PointGraphCorrect = {\n type: \"point\";\n coords: ReadonlyArray<Coord>;\n};\n\ntype PolygonGraphCorrect = {\n type: \"polygon\";\n match: \"similar\" | \"congruent\" | \"approx\";\n coords: ReadonlyArray<Coord>;\n};\n\ntype QuadraticGraphCorrect = {\n type: \"quadratic\";\n coords: [Coord, Coord, Coord];\n};\n\ntype SegmentGraphCorrect = {\n type: \"segment\";\n coords: CollinearTuple[];\n};\n\ntype SinusoidGraphCorrect = {\n type: \"sinusoid\";\n coords: CollinearTuple;\n};\n\ntype RayGraphCorrect = {\n type: \"ray\";\n coords: CollinearTuple;\n};\n\nexport type PerseusGraphCorrectType =\n | AngleGraphCorrect\n | CircleGraphCorrect\n | LinearGraphCorrect\n | LinearSystemGraphCorrect\n | NoneGraphCorrect\n | PointGraphCorrect\n | PolygonGraphCorrect\n | QuadraticGraphCorrect\n | RayGraphCorrect\n | SegmentGraphCorrect\n | SinusoidGraphCorrect;\n\nexport type PerseusLabelImageWidgetOptions = {\n // Translatable Text; Tex representation of choices\n choices: ReadonlyArray<string>;\n // The URL of the image\n imageUrl: string;\n // Translatable Text; To show up in the img.alt attribute\n imageAlt: string;\n // The height of the image\n imageHeight: number;\n // The width of the image\n imageWidth: number;\n // A list of markers to display on the image\n markers: ReadonlyArray<PerseusLabelImageMarker>;\n // Do not display answer choices in instructions\n hideChoicesFromInstructions: boolean;\n // Allow multiple answers per marker\n multipleAnswers: boolean;\n // Always false. Not used for this widget\n static: boolean;\n};\n\nexport type PerseusLabelImageMarker = {\n // A list of correct answers for this marker. Often only one but can have multiple\n answers: ReadonlyArray<string>;\n // Translatable Text; The text to show for the marker. Not displayed directly to the user\n label: string;\n // X Coordiate location of the marker on the image\n x: number;\n // Y Coordinate location of the marker on the image\n y: number;\n};\n\nexport type PerseusMatcherWidgetOptions = {\n // Translatable Text; Labels to adorn the headings for the columns. Only 2 values [left, right]. e.g. [\"Concepts\", \"Things\"]\n labels: ReadonlyArray<string>;\n // Translatable Text; Static concepts to show in the left column. e.g. [\"Fruit\", \"Color\", \"Clothes\"]\n left: ReadonlyArray<string>;\n // Translatable Markup; Values that represent the concepts to be correlated with the concepts. e.g. [\"Red\", \"Shirt\", \"Banana\"]\n right: ReadonlyArray<string>;\n // Order of the matched pairs matters. With this option enabled, only the order provided above will be treated as correct. This is useful when ordering is significant, such as in the context of a proof. If disabled, pairwise matching is sufficient. To make this clear, the left column becomes fixed in the provided order and only the cards in the right column can be moved.\n orderMatters: boolean;\n // Adds padding to the rows. Padding is good for text, but not needed for images.\n padding: boolean;\n};\n\nexport type PerseusMatrixWidgetAnswers = ReadonlyArray<ReadonlyArray<number>>;\nexport type PerseusMatrixWidgetOptions = {\n // Translatable Text; Shown before the matrix\n prefix?: string | undefined;\n // Translatable Text; Shown after the matrix\n suffix?: string | undefined;\n // A data matrix representing the \"correct\" answers to be entered into the matrix\n answers: PerseusMatrixWidgetAnswers;\n // The coordinate location of the cursor position at start. default: [0, 0]\n cursorPosition?: ReadonlyArray<number> | undefined;\n // The coordinate size of the matrix. Only supports 2-dimensional matrix. default: [3, 3]\n matrixBoardSize: ReadonlyArray<number>;\n // Whether this is meant to statically display the answers (true) or be used as an input field, graded against the answers\n static?: boolean | undefined;\n};\n\nexport type PerseusMeasurerWidgetOptions = {\n // The image that the user is meant to measure\n image: PerseusImageBackground;\n // Whether to show the Protractor tool overlayed on top of the image\n showProtractor: boolean;\n // Whether to show the Ruler tool overlayed on top of the image\n showRuler: boolean;\n // The unit to show on the ruler. e.g. \"mm\", \"cm\", \"m\", \"km\", \"in\", \"ft\", \"yd\", \"mi\"\n rulerLabel: string;\n // How many ticks to show on the ruler. e.g. 1, 2, 4, 8, 10, 16\n rulerTicks: number;\n // The number of image pixels per unit (label)\n rulerPixels: number;\n // The number of units to display on the ruler\n rulerLength: number;\n // Containing area [width, height]\n box: [number, number];\n // TODO(benchristel): static is not used. Remove it?\n // Always false. Not used for this widget\n static: boolean;\n};\n\nexport type MathFormat =\n | \"integer\"\n | \"mixed\"\n | \"improper\"\n | \"proper\"\n | \"decimal\"\n | \"percent\"\n | \"pi\";\n\nexport type PerseusNumericInputAnswerForm = {\n simplify: PerseusNumericInputSimplify | null | undefined;\n name: MathFormat;\n};\n\nexport type PerseusNumericInputSimplify =\n | \"required\"\n | \"correct\"\n | \"enforced\"\n | \"optional\";\n\nexport type PerseusNumericInputWidgetOptions = {\n // A list of all the possible correct and incorrect answers\n answers: ReadonlyArray<PerseusNumericInputAnswer>;\n // Translatable Text; Text to describe this input. This will be shown to users using screenreaders.\n labelText?: string | undefined;\n // Use size \"Normal\" for all text boxes, unless there are multiple text boxes in one line and the answer area is too narrow to fit them. Options: \"normal\" or \"small\"\n size: string;\n // A coefficient style number allows the student to use - for -1 and an empty string to mean 1.\n coefficient: boolean;\n // Whether to right-align the text or not\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n rightAlign?: boolean;\n // Always false. Not used for this widget\n static: boolean;\n};\n\nexport type PerseusNumericInputAnswer = {\n // Translatable Display; A description for why this answer is correct, wrong, or ungraded\n message: string;\n // The expected answer\n value?: number | null;\n // Whether this answer is \"correct\", \"wrong\", or \"ungraded\"\n status: string;\n // The forms available for this answer. Options: \"integer, \"\"decimal\", \"proper\", \"improper\", \"mixed\", or \"pi\"\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n answerForms?: ReadonlyArray<MathFormat>;\n // Whether we should check the answer strictly against the the configured answerForms (strict = true)\n // or include the set of default answerForms (strict = false).\n strict: boolean;\n // A range of error +/- the value\n // NOTE: perseus_data.go says this is non-nullable even though we handle null values.\n maxError: number | null | undefined;\n // Unsimplified answers are Ungraded, Accepted, or Wrong. Options: \"required\", \"correct\", or \"enforced\"\n simplify: PerseusNumericInputSimplify | null | undefined;\n};\n\nexport type PerseusNumberLineWidgetOptions = {\n // The position of the endpoints of the number line. Setting the range constrains the position of the answer and the labels.\n range: ReadonlyArray<number>;\n // This controls the position of the left / right labels. By default, the labels are set by the range. Note: Ensure that the labels line up with the tick marks, or it may be confusing for users.\n labelRange: ReadonlyArray<number | null>;\n // This controls the styling of the labels for the two main labels as well as all the tick mark labels, if applicable. Options: \"decimal\", \"improper\", \"mixed\", \"non-reduced\"\n labelStyle: string;\n // Show label ticks\n labelTicks: boolean;\n // Show tick controller\n isTickCtrl?: boolean | null | undefined;\n // The range of divisions within the line\n divisionRange: ReadonlyArray<number>;\n // This controls the number (and position) of the tick marks. The number of divisions is constrained to the division range. Note: The user will be able to specify the number of divisions in a number input.\n numDivisions: number | null | undefined;\n // This determines the number of different places the point will snap between two adjacent tick marks. Note: Ensure the required number of snap increments is provided to answer the question.\n snapDivisions: number;\n // This controls the number (and position) of the tick marks; you can either set the number of divisions (2 divisions would split the entire range in two halves), or the tick step (the distance between ticks) and the other value will be updated accordingly. Note: There is no check to see if labels coordinate with the tick marks, which may be confusing for users if the blue labels and black ticks are off-step.\n tickStep: number | null | undefined;\n // The correct relative value. default: \"eq\". options: \"eq\", \"lt\", \"gt\", \"le\", \"ge\"\n correctRel: string | null | undefined;\n // This is the correct answer. The answer is validated (as right or wrong) by using only the end position of the point and the relation (=, &lt;, &gt;, ≤, ≥).\n correctX: number | null;\n // This controls the initial position of the point along the number line\n initialX: number | null | undefined;\n // Show tooltips\n showTooltips?: boolean;\n // When true, the answer is displayed and is immutable\n static: boolean;\n};\n\nexport type PerseusOrdererWidgetOptions = {\n // All of the options available to the user. Place the cards in the correct order. The same card can be used more than once in the answer but will only be displayed once at the top of a stack of identical cards.\n options: ReadonlyArray<PerseusRenderer>;\n // The correct order of the options\n correctOptions: ReadonlyArray<PerseusRenderer>;\n // Cards that are not part of the answer\n otherOptions: ReadonlyArray<PerseusRenderer>;\n // \"normal\" for text options. \"auto\" for image options.\n height: \"normal\" | \"auto\";\n // Use the \"horizontal\" layout for short text and small images. The \"vertical\" layout is best for longer text (e.g. proofs).\n layout: \"horizontal\" | \"vertical\";\n};\n\nexport type PerseusPassageWidgetOptions = {\n // Translatable Text; To add footnotes, add ^ characters where they belong in the passage. Then, add ^ in the footnotes area to reference the footnotes in the passage.\n footnotes: string;\n // Translatable Text; The text of the passage\n passageText: string;\n // translatableText - An optional title that will appear directly above the passage in the same font style. (e.g. Passage 1)\n passageTitle: string;\n // Should we show line numbers along with the passage?\n showLineNumbers: boolean;\n // Always false. Not used for this widget\n static: boolean;\n};\n\nexport type PerseusPassageRefWidgetOptions = {\n // The passage number\n passageNumber: number;\n // The reference number\n referenceNumber: number;\n // Short summary of the referenced section. This will be included in parentheses and quotes automatically.\n summaryText?: string;\n};\n\nexport const plotterPlotTypes = [\n \"bar\",\n \"line\",\n \"pic\",\n \"histogram\",\n \"dotplot\",\n] as const;\nexport type PlotType = (typeof plotterPlotTypes)[number];\n\nexport type PerseusPlotterWidgetOptions = {\n // Translatable Text; The Axis labels. e.g. [\"X Label\", \"Y Label\"]\n labels: ReadonlyArray<string>;\n // Translatable Text; Categories to display along the X access. e.g. [\">0\", \">6\", \">12\", \">18\"]\n categories: ReadonlyArray<string>;\n // The type of the graph. options \"bar\", \"line\", \"pic\", \"histogram\", \"dotplot\"\n type: PlotType;\n // The maximimum Y tick to display in the graph\n maxY: number;\n // The scale of the Y Axis\n scaleY: number;\n // Which ticks to display the labels for. For instance, setting this to \"4\" will only show every 4th label (plus the last one)\n labelInterval: number | null | undefined;\n // Creates the specified number of divisions between the horizontal lines. Fewer snaps between lines makes the graph easier for the student to create correctly.\n snapsPerLine: number;\n // The Y values the graph should start with\n starting: ReadonlyArray<number>;\n // The Y values that represent the correct answer expected\n correct: ReadonlyArray<number>;\n // A picture to represent items in a graph.\n picUrl: string | null | undefined;\n // deprecated\n picSize: number | null | undefined;\n // deprecated\n picBoxHeight: number | null | undefined;\n // deprecated\n plotDimensions: ReadonlyArray<number>;\n};\n\nexport type PerseusRadioWidgetOptions = {\n // The choices provided to the user.\n choices: ReadonlyArray<PerseusRadioChoice>;\n // Does this have a \"none of the above\" option?\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n hasNoneOfTheAbove?: boolean;\n // If multipleSelect is enabled, Specify the number expected to be correct.\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n countChoices?: boolean;\n // Randomize the order of the options or keep them as defined\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n randomize?: boolean;\n // Does this set allow for multiple selections to be correct?\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n multipleSelect?: boolean;\n // deprecated\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n deselectEnabled?: boolean;\n // deprecated\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n onePerLine?: boolean;\n // deprecated\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n displayCount?: any;\n // v0 props\n // `noneOfTheAbove` is still in use (but only set to `false`).\n noneOfTheAbove?: false;\n};\n\nexport type PerseusRadioChoice = {\n // Translatable Markdown; The label for this choice\n content: string;\n // Translatable Markdown; A clue to give the user when they get it wrong\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n clue?: string;\n // Whether this option is a correct answer or not\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n correct?: boolean;\n // If this is none of the above, override the content with \"None of the above\"\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n isNoneOfTheAbove?: boolean;\n // deprecated\n // NOTE: perseus_data.go says this is required even though it isn't necessary.\n widgets?: PerseusWidgetsMap;\n};\n\nexport type PerseusSorterWidgetOptions = {\n // Translatable Text; The correct answer (in the correct order). The user will see the cards in a randomized order.\n correct: ReadonlyArray<string>;\n // Adds padding to the options. Padding is good for text but not needed for images\n padding: boolean;\n // Use the \"horizontal\" layout for short text and small images. The \"vertical\" layout is best for longer text and larger images.\n layout: \"horizontal\" | \"vertical\";\n};\n\nexport type PerseusTableWidgetOptions = {\n // Translatable Text; A list of column headers\n headers: ReadonlyArray<string>;\n // The number of rows to display\n rows: number;\n // The number of columns to display\n columns: number;\n // Translatable Text; A 2-dimensional array of text to populate the table with\n answers: ReadonlyArray<ReadonlyArray<string>>;\n};\n\nexport type PerseusInteractionWidgetOptions = {\n // The definition of the graph\n graph: PerseusInteractionGraph;\n // The elements of the graph\n elements: ReadonlyArray<PerseusInteractionElement>;\n // Always false. Not used for this widget\n static: boolean;\n};\n\nexport type PerseusInteractionGraph = {\n // \"canvas\", \"graph\"\n editableSettings?: ReadonlyArray<\"canvas\" | \"graph\">;\n // The Grid Canvas size. e.g. [400, 140]\n box: Size;\n // The Axis labels. e.g. [\"x\", \"y\"]\n labels: ReadonlyArray<string>;\n // The Axis ranges. e.g. [[-10, 10], [-10, 10]]\n range: [Interval, Interval];\n // The steps in the grid. default [1, 1]\n gridStep: [number, number];\n /**\n * The type of markings to display on the graph.\n */\n markings: MarkingsType;\n // The snap steps. default [0.5, 0.5]\n snapStep?: [number, number];\n // Whether the grid is valid or not. Do the numbers all make sense?\n // NOTE(jeremy) The editor for this widget sometimes stores the graph\n // editor validation error message into this field. It seems innocuous\n // because it looks like many of these usages don't actually use the graph\n // at all.\n valid?: boolean | string;\n // An optional background image to use\n backgroundImage?: PerseusImageBackground;\n // Whether to show the Protractor tool overlayed on top of the graph\n showProtractor?: boolean;\n // Whether to show the Ruler tool overlayed on top of the graph\n showRuler?: boolean;\n // The unit to show on the ruler. e.g. \"mm\", \"cm\", \"m\", \"km\", \"in\", \"ft\", \"yd\", \"mi\"\n rulerLabel?: string;\n // How many ticks to show on the ruler. e.g. 1, 2, 4, 8, 10, 16\n rulerTicks?: number;\n // This controls the number (and position) of the tick marks for the X and Y axis. e.g. [1, 1]\n tickStep: [number, number];\n};\n\nexport type PerseusInteractionElement =\n | {\n type: \"function\";\n // An identifier for the element\n key: string;\n options: PerseusInteractionFunctionElementOptions;\n }\n | {\n type: \"label\";\n // An identifier for the element\n key: string;\n options: PerseusInteractionLabelElementOptions;\n }\n | {\n type: \"line\";\n // An identifier for the element\n key: string;\n options: PerseusInteractionLineElementOptions;\n }\n | {\n type: \"movable-line\";\n // An identifier for the element\n key: string;\n options: PerseusInteractionMovableLineElementOptions;\n }\n | {\n type: \"movable-point\";\n // An identifier for the element\n key: string;\n options: PerseusInteractionMovablePointElementOptions;\n }\n | {\n type: \"parametric\";\n // An identifier for the element\n key: string;\n options: PerseusInteractionParametricElementOptions;\n }\n | {\n type: \"point\";\n // An identifier for the element\n key: string;\n options: PerseusInteractionPointElementOptions;\n }\n | {\n type: \"rectangle\";\n // An identifier for the element\n key: string;\n options: PerseusInteractionRectangleElementOptions;\n };\n\nexport type PerseusInteractionFunctionElementOptions = {\n // The definition of the function to draw on the graph. e.g \"x^2 + 1\"\n value: string;\n // The name of the function like f(n). default: \"f\"\n funcName: string;\n // The range of points to start plotting\n rangeMin: string;\n // The range of points to end plotting\n rangeMax: string;\n // The color of the stroke. e.g. #6495ED\n color: string;\n // If the function stroke has a dash, what is it? options: \"\", \"-\", \"- \", \".\", \". \"\n strokeDasharray: string;\n // The thickness of the stroke\n strokeWidth: number;\n};\n\nexport type PerseusInteractionLabelElementOptions = {\n // Translatable Text; the content of the label\n label: string;\n // The color of the label. e.g. \"red\"\n color: string;\n // The X location of the label\n coordX: string;\n // The Y location of the label\n coordY: string;\n};\n\nexport type PerseusInteractionLineElementOptions = {\n // A color code for the line segment. e.g. \"#FFOOAF\"\n color: string;\n // The start of the line segment (X)\n startX: string;\n // The start of the line segment (Y)\n startY: string;\n // The end of the line segment (X)\n endX: string;\n // The end of the line segment (Y)\n endY: string;\n // If the line stroke has a dash, what is it? options: \"\", \"-\", \"- \", \".\", \". \"\n strokeDasharray: string;\n // The thickness of the line\n strokeWidth: number;\n // Does the line have an arrow point to it? options: \"\", \"->\"\n arrows: string;\n};\n\nexport type PerseusInteractionMovableLineElementOptions = {\n // The start of the line segment (X)\n startX: string;\n // The start of the line segment (Y)\n startY: string;\n // Start updates (Xn, Yn) for n\n startSubscript: number;\n // The end of the line segment (X)\n endX: string;\n // The end of the line segment (Y)\n endY: string;\n // End updates (Xm, Ym) for m\n endSubscript: number;\n // How to constrain this line? options \"none\", \"snap\", \"x\", \"y\"\n constraint: string;\n // The snap resolution when constraint is set to \"snap\"\n snap: number;\n // The constraint function for when constraint is set to \"x\" or \"y\"\n constraintFn: string;\n // The lowest possible X value\n constraintXMin: string;\n // The highest possible X value\n constraintXMax: string;\n // The lowest possible Y value\n constraintYMin: string;\n // The highest possible Y value\n constraintYMax: string;\n};\n\nexport type PerseusInteractionMovablePointElementOptions = {\n // The X position of the point\n startX: string;\n // The Y position of the point\n startY: string;\n // Update (Xn, Yn) for n\n varSubscript: number;\n // How to constrain this line? options \"none\", \"snap\", \"x\", \"y\"\n constraint: string;\n // The snap resolution when constraint is set to \"snap\"\n snap: number;\n // The constraint function for when constraint is set to \"x\" or \"y\"\n constraintFn: string;\n // The lowest possible X value\n constraintXMin: string;\n // The highest possible X value\n constraintXMax: string;\n // The lowest possible Y value\n constraintYMin: string;\n // The highest possible Y value\n constraintYMax: string;\n};\n\nexport type PerseusInteractionParametricElementOptions = {\n // The function for the X coordinate. e.g. \"\\\\cos(t)\"\n x: string;\n // The function for the Y coordinate. e.g. \"\\\\sin(t)\"\n y: string;\n // The range of points to start plotting\n rangeMin: string;\n // The range of points to end plotting\n rangeMax: string;\n // The color of the stroke. e.g. #6495ED\n color: string;\n // If the function stroke has a dash, what is it? options: \"\", \"-\", \"- \", \".\", \". \"\n strokeDasharray: string;\n // The thickness of the stroke\n strokeWidth: number;\n};\n\nexport type PerseusInteractionPointElementOptions = {\n // The color of the point. e.g. \"black\"\n color: string;\n // The X coordinate of the point\n coordX: string;\n // The Y coordinate of the point\n coordY: string;\n};\n\nexport type PerseusInteractionRectangleElementOptions = {\n // The fill color. e.g. \"#EDD19B\"\n color: string;\n // The lower left point X\n coordX: string;\n // The lower left point Y\n coordY: string;\n // The width of the rectangle\n width: string;\n // The height of the rectangle\n height: string;\n};\n\nexport type PerseusCSProgramWidgetOptions = {\n // The ID of the CS program to embed\n programID: string;\n // Deprecated. Always null and sometimes omitted entirely.\n programType?: any;\n // Settings that you add here are available to the program as an object returned by Program.settings()\n settings: ReadonlyArray<PerseusCSProgramSetting>;\n // If you show the editor, you should use the \"full-width\" alignment to make room for the width of the editor.\n showEditor: boolean;\n // Whether to show the execute buttons\n showButtons: boolean;\n // The height of the widget\n height: number;\n // TODO(benchristel): static is not used. Delete it?\n // Always false\n static: boolean;\n};\n\nexport type PerseusCSProgramSetting = {\n // The name/key of the setting\n name: string;\n // The value of the setting\n value: string;\n};\n\nexport type PerseusPythonProgramWidgetOptions = {\n // The ID of the Python program to embed\n programID: string;\n // The height of the widget in pixels\n height: number;\n};\n\nexport type PerseusIFrameWidgetOptions = {\n // A URL to display OR a CS Program ID\n url: string;\n // Settings that you add here are available to the program as an object returned by Program.settings()\n settings?: ReadonlyArray<PerseusCSProgramSetting>;\n // The width of the widget\n width: number | string;\n // The height of the widget\n height: number | string;\n // Whether to allow the IFrame to become full-screen (like a video)\n allowFullScreen: boolean;\n // Whether to allow the iframe content to redirect the page\n allowTopNavigation?: boolean;\n // Always false\n static: boolean;\n};\n\nexport type PerseusPhetSimulationWidgetOptions = {\n // A URL to display, must start with https://phet.colorado.edu/\n url: string;\n // Translatable Text; Description of the sim for Khanmigo and alt text\n description: string;\n};\n\nexport type PerseusVideoWidgetOptions = {\n location: string;\n static?: boolean;\n};\n\nexport type PerseusInputNumberWidgetOptions = {\n answerType?:\n | \"number\"\n | \"decimal\"\n | \"integer\"\n | \"rational\"\n | \"improper\"\n | \"mixed\"\n | \"percent\"\n | \"pi\";\n inexact?: boolean;\n maxError?: number | string;\n rightAlign?: boolean;\n simplify: \"required\" | \"optional\" | \"enforced\";\n size: \"normal\" | \"small\";\n value: string | number;\n customKeypad?: boolean;\n};\n\nexport type PerseusMoleculeRendererWidgetOptions = {\n widgetId: string;\n rotationAngle?: number;\n smiles?: string;\n};\n\nexport type PerseusPassageRefTargetWidgetOptions = {\n content: string;\n};\n\nexport type PerseusWidgetOptions =\n | PerseusCategorizerWidgetOptions\n | PerseusCSProgramWidgetOptions\n | PerseusDefinitionWidgetOptions\n | PerseusDropdownWidgetOptions\n | PerseusExplanationWidgetOptions\n | PerseusExpressionWidgetOptions\n | PerseusGradedGroupSetWidgetOptions\n | PerseusGradedGroupWidgetOptions\n | PerseusIFrameWidgetOptions\n | PerseusImageWidgetOptions\n | PerseusInputNumberWidgetOptions\n | PerseusInteractionWidgetOptions\n | PerseusInteractiveGraphWidgetOptions\n | PerseusLabelImageWidgetOptions\n | PerseusMatcherWidgetOptions\n | PerseusMatrixWidgetOptions\n | PerseusMeasurerWidgetOptions\n | PerseusMoleculeRendererWidgetOptions\n | PerseusNumberLineWidgetOptions\n | PerseusNumericInputWidgetOptions\n | PerseusOrdererWidgetOptions\n | PerseusPassageRefTargetWidgetOptions\n | PerseusPassageRefWidgetOptions\n | PerseusPassageWidgetOptions\n | PerseusPhetSimulationWidgetOptions\n | PerseusPlotterWidgetOptions\n | PerseusRadioWidgetOptions\n | PerseusSorterWidgetOptions\n | PerseusTableWidgetOptions\n | PerseusVideoWidgetOptions;\n","import {lockedFigureColorNames} from \"../../data-schema\";\nimport {\n array,\n boolean,\n constant,\n enumeration,\n nullable,\n number,\n object,\n optional,\n pair,\n string,\n trio,\n union,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\nimport {discriminatedUnionOn} from \"../general-purpose-parsers/discriminated-union\";\n\nimport {parsePerseusImageBackground} from \"./perseus-image-background\";\nimport {parseWidget} from \"./widget\";\n\nimport type {\n InteractiveGraphWidget,\n LockedEllipseType,\n LockedFigure,\n LockedFigureColor,\n LockedFigureFillType,\n LockedFunctionType,\n LockedLabelType,\n LockedLineStyle,\n LockedLineType,\n LockedPointType,\n LockedPolygonType,\n LockedVectorType,\n PerseusGraphType,\n PerseusGraphTypeAngle,\n PerseusGraphTypeCircle,\n PerseusGraphTypeLinear,\n PerseusGraphTypeLinearSystem,\n PerseusGraphTypeNone,\n PerseusGraphTypePoint,\n PerseusGraphTypePolygon,\n PerseusGraphTypeQuadratic,\n PerseusGraphTypeRay,\n PerseusGraphTypeSegment,\n PerseusGraphTypeSinusoid,\n} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\n// Used to represent 2-D points and ranges\nconst pairOfNumbers = pair(number, number);\n\nconst parsePerseusGraphTypeAngle: Parser<PerseusGraphTypeAngle> = object({\n type: constant(\"angle\"),\n showAngles: optional(boolean),\n allowReflexAngles: optional(boolean),\n angleOffsetDeg: optional(number),\n snapDegrees: optional(number),\n match: optional(constant(\"congruent\")),\n coords: optional(trio(pairOfNumbers, pairOfNumbers, pairOfNumbers)),\n startCoords: optional(trio(pairOfNumbers, pairOfNumbers, pairOfNumbers)),\n});\n\nconst parsePerseusGraphTypeCircle: Parser<PerseusGraphTypeCircle> = object({\n type: constant(\"circle\"),\n center: optional(pairOfNumbers),\n radius: optional(number),\n startCoords: optional(\n object({\n center: pairOfNumbers,\n radius: number,\n }),\n ),\n // TODO: remove coord? it's legacy.\n coord: optional(pairOfNumbers),\n});\n\nconst parsePerseusGraphTypeLinear: Parser<PerseusGraphTypeLinear> = object({\n type: constant(\"linear\"),\n coords: optional(nullable(pair(pairOfNumbers, pairOfNumbers))),\n startCoords: optional(pair(pairOfNumbers, pairOfNumbers)),\n // TODO: remove coord? it's legacy.\n coord: optional(pairOfNumbers),\n});\n\nconst parsePerseusGraphTypeLinearSystem: Parser<PerseusGraphTypeLinearSystem> =\n object({\n type: constant(\"linear-system\"),\n // TODO(benchristel): default coords to empty array?\n coords: optional(nullable(array(pair(pairOfNumbers, pairOfNumbers)))),\n startCoords: optional(array(pair(pairOfNumbers, pairOfNumbers))),\n // TODO: remove coord? it's legacy.\n coord: optional(pairOfNumbers),\n });\n\nconst parsePerseusGraphTypeNone: Parser<PerseusGraphTypeNone> = object({\n type: constant(\"none\"),\n});\n\nconst parsePerseusGraphTypePoint: Parser<PerseusGraphTypePoint> = object({\n type: constant(\"point\"),\n numPoints: optional(union(number).or(constant(\"unlimited\")).parser),\n coords: optional(nullable(array(pairOfNumbers))),\n startCoords: optional(array(pairOfNumbers)),\n // TODO: remove coord? it's legacy.\n coord: optional(pairOfNumbers),\n});\n\nconst parsePerseusGraphTypePolygon: Parser<PerseusGraphTypePolygon> = object({\n type: constant(\"polygon\"),\n numSides: optional(union(number).or(constant(\"unlimited\")).parser),\n showAngles: optional(boolean),\n showSides: optional(boolean),\n snapTo: optional(enumeration(\"grid\", \"angles\", \"sides\")),\n match: optional(enumeration(\"similar\", \"congruent\", \"approx\", \"exact\")),\n startCoords: optional(array(pairOfNumbers)),\n // TODO: remove coord? it's legacy.\n coord: optional(pairOfNumbers),\n});\n\nconst parsePerseusGraphTypeQuadratic: Parser<PerseusGraphTypeQuadratic> =\n object({\n type: constant(\"quadratic\"),\n coords: optional(\n nullable(trio(pairOfNumbers, pairOfNumbers, pairOfNumbers)),\n ),\n startCoords: optional(\n trio(pairOfNumbers, pairOfNumbers, pairOfNumbers),\n ),\n // TODO: remove coord? it's legacy.\n coord: optional(pairOfNumbers),\n });\n\nconst parsePerseusGraphTypeRay: Parser<PerseusGraphTypeRay> = object({\n type: constant(\"ray\"),\n coords: optional(nullable(pair(pairOfNumbers, pairOfNumbers))),\n startCoords: optional(pair(pairOfNumbers, pairOfNumbers)),\n // TODO: remove coord? it's legacy.\n coord: optional(pairOfNumbers),\n});\n\nconst parsePerseusGraphTypeSegment: Parser<PerseusGraphTypeSegment> = object({\n type: constant(\"segment\"),\n // TODO(benchristel): default numSegments?\n numSegments: optional(number),\n coords: optional(nullable(array(pair(pairOfNumbers, pairOfNumbers)))),\n startCoords: optional(array(pair(pairOfNumbers, pairOfNumbers))),\n // TODO: remove coord? it's legacy.\n coord: optional(pairOfNumbers),\n});\n\nconst parsePerseusGraphTypeSinusoid: Parser<PerseusGraphTypeSinusoid> = object({\n type: constant(\"sinusoid\"),\n coords: optional(nullable(array(pairOfNumbers))),\n startCoords: optional(array(pairOfNumbers)),\n // TODO: remove coord? it's legacy.\n coord: optional(pairOfNumbers),\n});\n\nconst parsePerseusGraphType: Parser<PerseusGraphType> = discriminatedUnionOn(\n \"type\",\n)\n .withBranch(\"angle\", parsePerseusGraphTypeAngle)\n .withBranch(\"circle\", parsePerseusGraphTypeCircle)\n .withBranch(\"linear\", parsePerseusGraphTypeLinear)\n .withBranch(\"linear-system\", parsePerseusGraphTypeLinearSystem)\n .withBranch(\"none\", parsePerseusGraphTypeNone)\n .withBranch(\"point\", parsePerseusGraphTypePoint)\n .withBranch(\"polygon\", parsePerseusGraphTypePolygon)\n .withBranch(\"quadratic\", parsePerseusGraphTypeQuadratic)\n .withBranch(\"ray\", parsePerseusGraphTypeRay)\n .withBranch(\"segment\", parsePerseusGraphTypeSegment)\n .withBranch(\"sinusoid\", parsePerseusGraphTypeSinusoid).parser;\n\nconst parseLockedFigureColor: Parser<LockedFigureColor> = enumeration(\n ...lockedFigureColorNames,\n);\n\nconst parseLockedFigureFillType: Parser<LockedFigureFillType> = enumeration(\n \"none\",\n \"white\",\n \"translucent\",\n \"solid\",\n);\n\nconst parseLockedLineStyle: Parser<LockedLineStyle> = enumeration(\n \"solid\",\n \"dashed\",\n);\n\nconst parseLockedLabelType: Parser<LockedLabelType> = object({\n type: constant(\"label\"),\n coord: pairOfNumbers,\n text: string,\n color: parseLockedFigureColor,\n size: enumeration(\"small\", \"medium\", \"large\"),\n});\n\nconst parseLockedPointType: Parser<LockedPointType> = object({\n type: constant(\"point\"),\n coord: pairOfNumbers,\n color: parseLockedFigureColor,\n filled: boolean,\n // TODO(benchristel): default labels to empty array?\n labels: optional(array(parseLockedLabelType)),\n ariaLabel: optional(string),\n});\n\nconst parseLockedLineType: Parser<LockedLineType> = object({\n type: constant(\"line\"),\n kind: enumeration(\"line\", \"ray\", \"segment\"),\n points: pair(parseLockedPointType, parseLockedPointType),\n color: parseLockedFigureColor,\n lineStyle: parseLockedLineStyle,\n showPoint1: defaulted(boolean, () => false),\n showPoint2: defaulted(boolean, () => false),\n // TODO(benchristel): default labels to empty array?\n labels: optional(array(parseLockedLabelType)),\n ariaLabel: optional(string),\n});\n\nconst parseLockedVectorType: Parser<LockedVectorType> = object({\n type: constant(\"vector\"),\n points: pair(pairOfNumbers, pairOfNumbers),\n color: parseLockedFigureColor,\n // TODO(benchristel): default labels to empty array?\n labels: optional(array(parseLockedLabelType)),\n ariaLabel: optional(string),\n});\n\nconst parseLockedEllipseType: Parser<LockedEllipseType> = object({\n type: constant(\"ellipse\"),\n center: pairOfNumbers,\n radius: pairOfNumbers,\n angle: number,\n color: parseLockedFigureColor,\n fillStyle: parseLockedFigureFillType,\n strokeStyle: parseLockedLineStyle,\n // TODO(benchristel): default labels to empty array?\n labels: optional(array(parseLockedLabelType)),\n ariaLabel: optional(string),\n});\n\nconst parseLockedPolygonType: Parser<LockedPolygonType> = object({\n type: constant(\"polygon\"),\n points: array(pairOfNumbers),\n color: parseLockedFigureColor,\n showVertices: boolean,\n fillStyle: parseLockedFigureFillType,\n strokeStyle: parseLockedLineStyle,\n // TODO(benchristel): default labels to empty array?\n labels: optional(array(parseLockedLabelType)),\n ariaLabel: optional(string),\n});\n\n// Exported for testing.\nexport const parseLockedFunctionDomain = defaulted(\n pair(\n defaulted(number, () => -Infinity),\n defaulted(number, () => Infinity),\n ),\n (): [number, number] => [-Infinity, Infinity],\n);\n\nconst parseLockedFunctionType: Parser<LockedFunctionType> = object({\n type: constant(\"function\"),\n color: parseLockedFigureColor,\n strokeStyle: parseLockedLineStyle,\n equation: string,\n directionalAxis: enumeration(\"x\", \"y\"),\n domain: parseLockedFunctionDomain,\n // TODO(benchristel): default labels to empty array?\n labels: optional(array(parseLockedLabelType)),\n ariaLabel: optional(string),\n});\n\nconst parseLockedFigure: Parser<LockedFigure> = discriminatedUnionOn(\"type\")\n .withBranch(\"point\", parseLockedPointType)\n .withBranch(\"line\", parseLockedLineType)\n .withBranch(\"vector\", parseLockedVectorType)\n .withBranch(\"ellipse\", parseLockedEllipseType)\n .withBranch(\"polygon\", parseLockedPolygonType)\n .withBranch(\"function\", parseLockedFunctionType)\n .withBranch(\"label\", parseLockedLabelType).parser;\n\nexport const parseInteractiveGraphWidget: Parser<InteractiveGraphWidget> =\n parseWidget(\n constant(\"interactive-graph\"),\n object({\n step: pairOfNumbers,\n // TODO(benchristel): rather than making gridStep and snapStep\n // optional, we should duplicate the defaulting logic from the\n // InteractiveGraph component. See parse-perseus-json/README.md for\n // why.\n gridStep: optional(pairOfNumbers),\n snapStep: optional(pairOfNumbers),\n backgroundImage: optional(parsePerseusImageBackground),\n markings: enumeration(\"graph\", \"grid\", \"none\"),\n labels: optional(array(string)),\n showProtractor: boolean,\n showRuler: optional(boolean),\n showTooltips: optional(boolean),\n rulerLabel: optional(string),\n rulerTicks: optional(number),\n range: pair(pairOfNumbers, pairOfNumbers),\n // NOTE(benchristel): I copied the default graph from\n // interactive-graph.tsx. See the parse-perseus-json/README.md for\n // an explanation of why we want to duplicate the default here.\n graph: defaulted(parsePerseusGraphType, () => ({\n type: \"linear\" as const,\n })),\n correct: parsePerseusGraphType,\n // TODO(benchristel): default lockedFigures to empty array\n lockedFigures: optional(array(parseLockedFigure)),\n fullGraphLabel: optional(string),\n fullGraphAriaDescription: optional(string),\n }),\n );\n","import {\n array,\n boolean,\n constant,\n number,\n object,\n string,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {LabelImageWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parseLabelImageWidget: Parser<LabelImageWidget> = parseWidget(\n constant(\"label-image\"),\n object({\n choices: array(string),\n imageUrl: string,\n imageAlt: string,\n imageHeight: number,\n imageWidth: number,\n markers: array(\n object({\n answers: array(string),\n label: string,\n x: number,\n y: number,\n }),\n ),\n hideChoicesFromInstructions: boolean,\n multipleAnswers: boolean,\n static: defaulted(boolean, () => false),\n }),\n);\n","import {\n array,\n boolean,\n constant,\n object,\n string,\n} from \"../general-purpose-parsers\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {MatcherWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parseMatcherWidget: Parser<MatcherWidget> = parseWidget(\n constant(\"matcher\"),\n object({\n labels: array(string),\n left: array(string),\n right: array(string),\n orderMatters: boolean,\n padding: boolean,\n }),\n);\n","import {\n array,\n boolean,\n constant,\n number,\n object,\n optional,\n pipeParsers,\n string,\n union,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\nimport {stringToNumber} from \"../general-purpose-parsers/string-to-number\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {MatrixWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nconst numberOrString = union(number).or(string).parser;\nconst numeric = pipeParsers(defaulted(numberOrString, () => NaN)).then(\n stringToNumber,\n).parser;\n\nexport const parseMatrixWidget: Parser<MatrixWidget> = parseWidget(\n defaulted(constant(\"matrix\"), () => \"matrix\"),\n object({\n prefix: optional(string),\n suffix: optional(string),\n answers: array(array(numeric)),\n cursorPosition: optional(array(number)),\n matrixBoardSize: array(number),\n static: optional(boolean),\n }),\n);\n","import {\n boolean,\n constant,\n number,\n object,\n pair,\n string,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parsePerseusImageBackground} from \"./perseus-image-background\";\nimport {parseWidget} from \"./widget\";\n\nimport type {MeasurerWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parseMeasurerWidget: Parser<MeasurerWidget> = parseWidget(\n constant(\"measurer\"),\n object({\n // The default value for image comes from measurer.tsx.\n // See parse-perseus-json/README.md for why we want to duplicate the\n // defaults here.\n image: defaulted(parsePerseusImageBackground, () => ({\n url: null,\n top: 0,\n left: 0,\n })),\n showProtractor: boolean,\n showRuler: boolean,\n rulerLabel: string,\n rulerTicks: number,\n rulerPixels: number,\n rulerLength: number,\n box: pair(number, number),\n // TODO(benchristel): static is not used. Remove it?\n static: defaulted(boolean, () => false),\n }),\n);\n","import {\n constant,\n object,\n string,\n number,\n optional,\n} from \"../general-purpose-parsers\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {MoleculeRendererWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parseMoleculeRendererWidget: Parser<MoleculeRendererWidget> =\n parseWidget(\n constant(\"molecule-renderer\"),\n object({\n widgetId: string,\n rotationAngle: optional(number),\n smiles: optional(string),\n }),\n );\n","import {\n constant,\n object,\n array,\n number,\n string,\n boolean,\n optional,\n nullable,\n pipeParsers,\n union,\n} from \"../general-purpose-parsers\";\nimport {convert} from \"../general-purpose-parsers/convert\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {NumberLineWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nconst emptyStringToNull = pipeParsers(constant(\"\")).then(\n convert(() => null),\n).parser;\n\nexport const parseNumberLineWidget: Parser<NumberLineWidget> = parseWidget(\n constant(\"number-line\"),\n object({\n range: array(number),\n labelRange: array(nullable(union(number).or(emptyStringToNull).parser)),\n labelStyle: string,\n labelTicks: boolean,\n isTickCtrl: optional(nullable(boolean)),\n divisionRange: array(number),\n numDivisions: optional(nullable(number)),\n // NOTE(benchristel): I copied the default snapDivisions from\n // number-line.tsx. See the parse-perseus-json/README.md for\n // an explanation of why we want to duplicate the default here.\n snapDivisions: defaulted(number, () => 2),\n tickStep: optional(nullable(number)),\n correctRel: optional(nullable(string)),\n correctX: nullable(number),\n initialX: optional(nullable(number)),\n showTooltips: optional(boolean),\n static: defaulted(boolean, () => false),\n }),\n);\n","import {\n constant,\n object,\n array,\n string,\n number,\n optional,\n enumeration,\n boolean,\n nullable,\n union,\n pipeParsers,\n} from \"../general-purpose-parsers\";\nimport {convert} from \"../general-purpose-parsers/convert\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {NumericInputWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nconst parseMathFormat = enumeration(\n \"integer\",\n \"mixed\",\n \"improper\",\n \"proper\",\n \"decimal\",\n \"percent\",\n \"pi\",\n);\n\nconst parseSimplify = enumeration(\n \"required\",\n \"correct\",\n \"enforced\",\n \"optional\",\n);\n\nexport const parseNumericInputWidget: Parser<NumericInputWidget> = parseWidget(\n constant(\"numeric-input\"),\n object({\n answers: array(\n object({\n message: string,\n // TODO(benchristel): value should never be null or undefined,\n // but we have some content where it is anyway. If we backfill\n // the data, simplify this.\n value: optional(nullable(number)),\n status: string,\n answerForms: defaulted(array(parseMathFormat), () => undefined),\n strict: boolean,\n maxError: optional(nullable(number)),\n // TODO(benchristel): simplify should never be a boolean, but we\n // have some content where it is anyway. If we ever backfill\n // the data, we should simplify `simplify`.\n simplify: optional(\n nullable(\n union(parseSimplify).or(\n pipeParsers(boolean).then(\n convert((value) => {\n if (typeof value === \"boolean\") {\n return value ? \"required\" : \"optional\";\n }\n return value;\n }),\n ).parser,\n ).parser,\n ),\n ),\n }),\n ),\n labelText: optional(string),\n size: string,\n coefficient: defaulted(boolean, () => false),\n rightAlign: optional(boolean),\n static: defaulted(boolean, () => false),\n answerForms: optional(\n array(\n object({\n name: parseMathFormat,\n simplify: optional(\n nullable(\n enumeration(\n \"required\",\n \"correct\",\n \"enforced\",\n \"optional\",\n ),\n ),\n ),\n }),\n ),\n ),\n }),\n);\n","import {\n array,\n constant,\n enumeration,\n object,\n pipeParsers,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parsePerseusRenderer} from \"./perseus-renderer\";\nimport {parseWidget} from \"./widget\";\n\nimport type {OrdererWidget} from \"../../data-schema\";\nimport type {Parser, PartialParser} from \"../parser-types\";\n\n// There is an import cycle between orderer-widget.ts and perseus-renderer.ts.\n// This wrapper ensures that we don't refer to parsePerseusRenderer before\n// it's defined.\nfunction parseRenderer(rawValue, ctx) {\n return parsePerseusRenderer(rawValue, ctx);\n}\n\nconst largeToAuto: PartialParser<\n \"normal\" | \"auto\" | \"large\",\n \"normal\" | \"auto\"\n> = (height, ctx) => {\n if (height === \"large\") {\n return ctx.success(\"auto\");\n }\n return ctx.success(height);\n};\n\nexport const parseOrdererWidget: Parser<OrdererWidget> = parseWidget(\n constant(\"orderer\"),\n object({\n options: defaulted(array(parseRenderer), () => []),\n correctOptions: array(parseRenderer),\n otherOptions: array(parseRenderer),\n height: pipeParsers(enumeration(\"normal\", \"auto\", \"large\")).then(\n largeToAuto,\n ).parser,\n layout: defaulted(\n enumeration(\"horizontal\", \"vertical\"),\n () => \"horizontal\" as const,\n ),\n }),\n);\n","import {\n constant,\n object,\n string,\n number,\n optional,\n} from \"../general-purpose-parsers\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {PassageRefWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parsePassageRefWidget: Parser<PassageRefWidget> = parseWidget(\n constant(\"passage-ref\"),\n object({\n passageNumber: number,\n referenceNumber: number,\n summaryText: optional(string),\n }),\n);\n","import {constant, object, string, boolean} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {PassageWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parsePassageWidget: Parser<PassageWidget> = parseWidget(\n constant(\"passage\"),\n object({\n footnotes: defaulted(string, () => \"\"),\n passageText: string,\n passageTitle: defaulted(string, () => \"\"),\n showLineNumbers: boolean,\n static: defaulted(boolean, () => false),\n }),\n);\n","import {constant, object, string} from \"../general-purpose-parsers\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {PhetSimulationWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parsePhetSimulationWidget: Parser<PhetSimulationWidget> =\n parseWidget(\n constant(\"phet-simulation\"),\n object({\n url: string,\n description: string,\n }),\n );\n","import {plotterPlotTypes} from \"../../data-schema\";\nimport {\n constant,\n object,\n string,\n array,\n number,\n optional,\n nullable,\n enumeration,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {PlotterWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parsePlotterWidget: Parser<PlotterWidget> = parseWidget(\n constant(\"plotter\"),\n object({\n labels: array(string),\n categories: array(string),\n type: enumeration(...plotterPlotTypes),\n maxY: number,\n // The default value for scaleY comes from plotter.tsx.\n // See parse-perseus-json/README.md for why we want to duplicate the\n // defaults here.\n scaleY: defaulted(number, () => 1),\n labelInterval: optional(nullable(number)),\n // The default value for snapsPerLine comes from plotter.tsx.\n // See parse-perseus-json/README.md for why we want to duplicate the\n // defaults here.\n snapsPerLine: defaulted(number, () => 2),\n starting: array(number),\n correct: array(number),\n picUrl: optional(nullable(string)),\n picSize: optional(nullable(number)),\n picBoxHeight: optional(nullable(number)),\n // NOTE(benchristel): I copied the default plotDimensions from\n // plotter.tsx. See the parse-perseus-json/README.md for an explanation\n // of why we want to duplicate the defaults here.\n plotDimensions: defaulted(array(number), () => [380, 300]),\n }),\n);\n","import {constant, object, string, number} from \"../general-purpose-parsers\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {PythonProgramWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parsePythonProgramWidget: Parser<PythonProgramWidget> =\n parseWidget(\n constant(\"python-program\"),\n object({\n programID: string,\n height: number,\n }),\n );\n","import {\n any,\n array,\n boolean,\n constant,\n object,\n optional,\n string,\n} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseWidget} from \"./widget\";\nimport {parseWidgetsMap} from \"./widgets-map\";\n\nimport type {RadioWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parseRadioWidget: Parser<RadioWidget> = parseWidget(\n constant(\"radio\"),\n object({\n choices: array(\n object({\n content: defaulted(string, () => \"\"),\n clue: optional(string),\n correct: optional(boolean),\n isNoneOfTheAbove: optional(boolean),\n // deprecated\n // There is an import cycle between radio-widget.ts and\n // widgets-map.ts. The anonymous function below ensures that we\n // don't refer to parseWidgetsMap before it's defined.\n widgets: defaulted(\n (rawVal, ctx) => parseWidgetsMap(rawVal, ctx),\n () => undefined,\n ),\n }),\n ),\n hasNoneOfTheAbove: optional(boolean),\n countChoices: optional(boolean),\n randomize: optional(boolean),\n multipleSelect: optional(boolean),\n deselectEnabled: optional(boolean),\n // deprecated\n onePerLine: optional(boolean),\n // deprecated\n displayCount: optional(any),\n // v0 props\n // `noneOfTheAbove` is still in use (but only set to `false`).\n noneOfTheAbove: optional(constant(false)),\n }),\n);\n","import {\n array,\n boolean,\n constant,\n enumeration,\n object,\n string,\n} from \"../general-purpose-parsers\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {SorterWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parseSorterWidget: Parser<SorterWidget> = parseWidget(\n constant(\"sorter\"),\n object({\n correct: array(string),\n padding: boolean,\n layout: enumeration(\"horizontal\", \"vertical\"),\n }),\n);\n","import {\n array,\n number,\n constant,\n object,\n string,\n} from \"../general-purpose-parsers\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {TableWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parseTableWidget: Parser<TableWidget> = parseWidget(\n constant(\"table\"),\n object({\n headers: array(string),\n rows: number,\n columns: number,\n answers: array(array(string)),\n }),\n);\n","import {\n constant,\n object,\n string,\n boolean,\n optional,\n} from \"../general-purpose-parsers\";\n\nimport {parseWidget} from \"./widget\";\n\nimport type {VideoWidget} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parseVideoWidget: Parser<VideoWidget> = parseWidget(\n constant(\"video\"),\n object({\n location: string,\n static: optional(boolean),\n }),\n);\n","import {\n any,\n pair,\n isObject,\n string,\n object,\n constant,\n} from \"../general-purpose-parsers\";\nimport {isFailure} from \"../result\";\n\nimport {parseCategorizerWidget} from \"./categorizer-widget\";\nimport {parseCSProgramWidget} from \"./cs-program-widget\";\nimport {parseDefinitionWidget} from \"./definition-widget\";\nimport {parseDropdownWidget} from \"./dropdown-widget\";\nimport {parseExplanationWidget} from \"./explanation-widget\";\nimport {parseExpressionWidget} from \"./expression-widget\";\nimport {parseGradedGroupSetWidget} from \"./graded-group-set-widget\";\nimport {parseGradedGroupWidget} from \"./graded-group-widget\";\nimport {parseGrapherWidget} from \"./grapher-widget\";\nimport {parseGroupWidget} from \"./group-widget\";\nimport {parseIframeWidget} from \"./iframe-widget\";\nimport {parseImageWidget} from \"./image-widget\";\nimport {parseInputNumberWidget} from \"./input-number-widget\";\nimport {parseInteractionWidget} from \"./interaction-widget\";\nimport {parseInteractiveGraphWidget} from \"./interactive-graph-widget\";\nimport {parseLabelImageWidget} from \"./label-image-widget\";\nimport {parseMatcherWidget} from \"./matcher-widget\";\nimport {parseMatrixWidget} from \"./matrix-widget\";\nimport {parseMeasurerWidget} from \"./measurer-widget\";\nimport {parseMoleculeRendererWidget} from \"./molecule-renderer-widget\";\nimport {parseNumberLineWidget} from \"./number-line-widget\";\nimport {parseNumericInputWidget} from \"./numeric-input-widget\";\nimport {parseOrdererWidget} from \"./orderer-widget\";\nimport {parsePassageRefWidget} from \"./passage-ref-widget\";\nimport {parsePassageWidget} from \"./passage-widget\";\nimport {parsePhetSimulationWidget} from \"./phet-simulation-widget\";\nimport {parsePlotterWidget} from \"./plotter-widget\";\nimport {parsePythonProgramWidget} from \"./python-program-widget\";\nimport {parseRadioWidget} from \"./radio-widget\";\nimport {parseSorterWidget} from \"./sorter-widget\";\nimport {parseTableWidget} from \"./table-widget\";\nimport {parseVideoWidget} from \"./video-widget\";\nimport {parseWidget} from \"./widget\";\n\nimport type {\n DeprecatedStandinWidget,\n PerseusWidgetsMap,\n} from \"../../data-schema\";\nimport type {ParseContext, Parser, ParseResult} from \"../parser-types\";\n\nexport const parseWidgetsMap: Parser<PerseusWidgetsMap> = (rawValue, ctx) => {\n if (!isObject(rawValue)) {\n return ctx.failure(\"PerseusWidgetsMap\", rawValue);\n }\n\n const widgetsMap: PerseusWidgetsMap = {};\n for (const key of Object.keys(rawValue)) {\n // parseWidgetsMapEntry modifies the widgetsMap. This is kind of gross,\n // but it's the only way I could find to make TypeScript check the key\n // against the widget type.\n const entryResult = parseWidgetsMapEntry(\n [key, rawValue[key]],\n widgetsMap,\n ctx.forSubtree(key),\n );\n if (isFailure(entryResult)) {\n return entryResult;\n }\n }\n\n return ctx.success(widgetsMap);\n};\n\nconst parseWidgetsMapEntry: (\n entry: [string, unknown],\n widgetMap: PerseusWidgetsMap,\n ctx: ParseContext,\n) => ParseResult<unknown> = ([id, widget], widgetMap, ctx) => {\n const idComponentsResult = parseWidgetIdComponents(\n id.split(\" \"),\n ctx.forSubtree(\"(widget ID)\"),\n );\n if (isFailure(idComponentsResult)) {\n return idComponentsResult;\n }\n const [type, n] = idComponentsResult.value;\n\n function parseAndAssign<K extends keyof PerseusWidgetsMap>(\n key: K,\n parse: Parser<PerseusWidgetsMap[K]>,\n ): ParseResult<unknown> {\n const widgetResult = parse(widget, ctx);\n if (isFailure(widgetResult)) {\n return widgetResult;\n }\n widgetMap[key] = widgetResult.value;\n return ctx.success(undefined);\n }\n\n switch (type) {\n case \"categorizer\":\n return parseAndAssign(`categorizer ${n}`, parseCategorizerWidget);\n case \"cs-program\":\n return parseAndAssign(`cs-program ${n}`, parseCSProgramWidget);\n case \"definition\":\n return parseAndAssign(`definition ${n}`, parseDefinitionWidget);\n case \"dropdown\":\n return parseAndAssign(`dropdown ${n}`, parseDropdownWidget);\n case \"explanation\":\n return parseAndAssign(`explanation ${n}`, parseExplanationWidget);\n case \"expression\":\n return parseAndAssign(`expression ${n}`, parseExpressionWidget);\n case \"grapher\":\n return parseAndAssign(`grapher ${n}`, parseGrapherWidget);\n case \"group\":\n return parseAndAssign(`group ${n}`, parseGroupWidget);\n case \"graded-group\":\n return parseAndAssign(`graded-group ${n}`, parseGradedGroupWidget);\n case \"graded-group-set\":\n return parseAndAssign(\n `graded-group-set ${n}`,\n parseGradedGroupSetWidget,\n );\n case \"iframe\":\n return parseAndAssign(`iframe ${n}`, parseIframeWidget);\n case \"image\":\n return parseAndAssign(`image ${n}`, parseImageWidget);\n case \"input-number\":\n return parseAndAssign(`input-number ${n}`, parseInputNumberWidget);\n case \"interaction\":\n return parseAndAssign(`interaction ${n}`, parseInteractionWidget);\n case \"interactive-graph\":\n return parseAndAssign(\n `interactive-graph ${n}`,\n parseInteractiveGraphWidget,\n );\n case \"label-image\":\n return parseAndAssign(`label-image ${n}`, parseLabelImageWidget);\n case \"matcher\":\n return parseAndAssign(`matcher ${n}`, parseMatcherWidget);\n case \"matrix\":\n return parseAndAssign(`matrix ${n}`, parseMatrixWidget);\n case \"measurer\":\n return parseAndAssign(`measurer ${n}`, parseMeasurerWidget);\n case \"molecule-renderer\":\n return parseAndAssign(\n `molecule-renderer ${n}`,\n parseMoleculeRendererWidget,\n );\n case \"number-line\":\n return parseAndAssign(`number-line ${n}`, parseNumberLineWidget);\n case \"numeric-input\":\n return parseAndAssign(\n `numeric-input ${n}`,\n parseNumericInputWidget,\n );\n case \"orderer\":\n return parseAndAssign(`orderer ${n}`, parseOrdererWidget);\n case \"passage\":\n return parseAndAssign(`passage ${n}`, parsePassageWidget);\n case \"passage-ref\":\n return parseAndAssign(`passage-ref ${n}`, parsePassageRefWidget);\n case \"passage-ref-target\":\n // NOTE(benchristel): as of 2024-11-12, passage-ref-target is only\n // used in test content. See:\n // https://www.khanacademy.org/devadmin/content/search?query=widget:passage-ref-target\n return parseAndAssign(`passage-ref-target ${n}`, any);\n case \"phet-simulation\":\n return parseAndAssign(\n `phet-simulation ${n}`,\n parsePhetSimulationWidget,\n );\n case \"plotter\":\n return parseAndAssign(`plotter ${n}`, parsePlotterWidget);\n case \"python-program\":\n return parseAndAssign(\n `python-program ${n}`,\n parsePythonProgramWidget,\n );\n case \"radio\":\n return parseAndAssign(`radio ${n}`, parseRadioWidget);\n case \"sorter\":\n return parseAndAssign(`sorter ${n}`, parseSorterWidget);\n case \"table\":\n return parseAndAssign(`table ${n}`, parseTableWidget);\n case \"video\":\n return parseAndAssign(`video ${n}`, parseVideoWidget);\n case \"sequence\":\n // sequence is a deprecated widget type, and the corresponding\n // widget component no longer exists.\n return parseAndAssign(`sequence ${n}`, parseDeprecatedWidget);\n case \"lights-puzzle\":\n return parseAndAssign(`lights-puzzle ${n}`, parseDeprecatedWidget);\n case \"simulator\":\n return parseAndAssign(`simulator ${n}`, parseDeprecatedWidget);\n case \"transformer\":\n return parseAndAssign(`transformer ${n}`, parseDeprecatedWidget);\n\n default:\n return parseAndAssign(\n `${type} ${n}` as any,\n parseWidget(constant(type), any) as any,\n );\n }\n};\n\nconst parseDeprecatedWidget: Parser<DeprecatedStandinWidget> = parseWidget(\n // Ignore the incoming widget type and hardcode \"deprecated-standin\"\n (_, ctx) => ctx.success(\"deprecated-standin\" as const),\n // Allow any widget options\n object({}),\n);\n\nconst parseStringToNonNegativeInt: Parser<number> = (rawValue, ctx) => {\n // The article renderer seems to allow the numeric part of a widget ID to\n // be 0, at least for image widgets. However, if widget IDs in an exercise\n // contain 0, the exercise renderer will blow up. We allow 0 here for\n // compatibility with articles.\n if (typeof rawValue !== \"string\" || !/^(0|[1-9][0-9]*)$/.test(rawValue)) {\n return ctx.failure(\n \"a string representing a non-negative integer\",\n rawValue,\n );\n }\n return ctx.success(+rawValue);\n};\n\nconst parseWidgetIdComponents = pair(string, parseStringToNonNegativeInt);\n","import {any, object, string} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseImages} from \"./images-map\";\nimport {parseWidgetsMap} from \"./widgets-map\";\n\nimport type {PerseusRenderer} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parsePerseusRenderer: Parser<PerseusRenderer> = defaulted(\n object({\n // TODO(benchristel): content is also defaulted to empty string in\n // renderer.tsx. See if we can remove one default or the other.\n content: defaulted(string, () => \"\"),\n // This module has an import cycle with parseWidgetsMap, because the\n // `group` widget can contain another renderer.\n // The anonymous function below ensures that we don't try to access\n // parseWidgetsMap before it's defined.\n widgets: defaulted(\n (rawVal, ctx) => parseWidgetsMap(rawVal, ctx),\n () => ({}),\n ),\n images: parseImages,\n // deprecated\n metadata: any,\n }),\n // Default value\n () => ({\n content: \"\",\n widgets: {},\n images: {},\n }),\n);\n","import {array, union} from \"../general-purpose-parsers\";\n\nimport {parsePerseusRenderer} from \"./perseus-renderer\";\n\nimport type {PerseusArticle} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parsePerseusArticle: Parser<PerseusArticle> = union(\n parsePerseusRenderer,\n).or(array(parsePerseusRenderer)).parser;\n","import {any, boolean, object, string} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseImages} from \"./images-map\";\nimport {parseWidgetsMap} from \"./widgets-map\";\n\nimport type {Hint} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parseHint: Parser<Hint> = object({\n replace: defaulted(boolean, () => undefined),\n content: string,\n widgets: defaulted(parseWidgetsMap, () => ({})),\n images: parseImages,\n // deprecated\n metadata: any,\n});\n","import {object, pipeParsers} from \"../general-purpose-parsers\";\nimport {convert} from \"../general-purpose-parsers/convert\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport type {PerseusAnswerArea} from \"@khanacademy/perseus-core\";\n\nexport const parsePerseusAnswerArea = pipeParsers(\n defaulted(object({}), () => ({})),\n).then(convert(toAnswerArea)).parser;\n\n// Some answerAreas have extra, bogus fields, like:\n//\n// \"answerArea\": {\n// \"type\": \"multiple\",\n// \"options\": {},\n// \"version\": null,\n// \"static\": false,\n// \"graded\": false,\n// \"alignment\": \"\",\n// }\n//\n// This function filters the fields of an answerArea object, keeping only the\n// known ones, and converts `undefined` and `null` values to `false`.\nfunction toAnswerArea(raw: Record<string, unknown>): PerseusAnswerArea {\n return {\n zTable: !!raw.zTable,\n calculator: !!raw.calculator,\n chi2Table: !!raw.chi2Table,\n financialCalculatorMonthlyPayment:\n !!raw.financialCalculatorMonthlyPayment,\n financialCalculatorTotalAmount: !!raw.financialCalculatorTotalAmount,\n financialCalculatorTimeToPayOff: !!raw.financialCalculatorTimeToPayOff,\n periodicTable: !!raw.periodicTable,\n periodicTableWithKey: !!raw.periodicTableWithKey,\n tTable: !!raw.tTable,\n };\n}\n","import {any, array, number, object, optional} from \"../general-purpose-parsers\";\nimport {defaulted} from \"../general-purpose-parsers/defaulted\";\n\nimport {parseHint} from \"./hint\";\nimport {parsePerseusAnswerArea} from \"./perseus-answer-area\";\nimport {parsePerseusRenderer} from \"./perseus-renderer\";\n\nimport type {PerseusItem} from \"../../data-schema\";\nimport type {Parser} from \"../parser-types\";\n\nexport const parsePerseusItem: Parser<PerseusItem> = object({\n question: parsePerseusRenderer,\n hints: defaulted(array(parseHint), () => []),\n answerArea: parsePerseusAnswerArea,\n itemDataVersion: optional(\n object({\n major: number,\n minor: number,\n }),\n ),\n // Deprecated field\n answer: any,\n});\n","import {isRealJSONParse} from \"../utils/is-real-json-parse\";\n\nimport {parse} from \"./parse\";\nimport {parsePerseusArticle as migrateAndTypecheckPerseusArticle} from \"./perseus-parsers/perseus-article\";\nimport {parsePerseusItem as migrateAndTypecheckPerseusItem} from \"./perseus-parsers/perseus-item\";\nimport {failure, isFailure} from \"./result\";\n\nimport type {Result} from \"./result\";\nimport type {PerseusItem, PerseusArticle} from \"../data-schema\";\n\n/**\n * Helper to parse PerseusItem JSON\n * Why not just use JSON.parse? We want:\n * - To make sure types are correct\n * - To give us a central place to validate/transform output if needed\n * @deprecated - use parseAndMigratePerseusItem instead\n * @param {string} json - the stringified PerseusItem JSON\n * @returns {PerseusItem} the parsed PerseusItem object\n */\nexport function parsePerseusItem(json: string): PerseusItem {\n // Try to block a cheating vector which relies on monkey-patching\n // JSON.parse\n if (isRealJSONParse(JSON.parse)) {\n return JSON.parse(json);\n }\n throw new Error(\"Something went wrong.\");\n}\n\nexport type ParseFailureDetail = {\n /**\n * A human-readable error message describing where in the object tree\n * parsing failed.\n */\n message: string;\n /**\n * The raw result of parsing the input JSON, with no migrations applied.\n * Use at your own risk.\n */\n invalidObject: unknown;\n};\n\n/**\n * Parses a PerseusItem from a JSON string, migrates old formats to the latest\n * schema, and runtime-typechecks the result. Use this to parse assessmentItem\n * data.\n *\n * @returns a {@link Result} of the parsed PerseusItem. If the result is a\n * failure, it will contain an error message describing where in the tree\n * parsing failed.\n * @throws SyntaxError if the argument is not well-formed JSON.\n */\nexport function parseAndMigratePerseusItem(\n json: string,\n): Result<PerseusItem, ParseFailureDetail> {\n throwErrorIfCheatingDetected();\n const object: unknown = JSON.parse(json);\n const result = parse(object, migrateAndTypecheckPerseusItem);\n if (isFailure(result)) {\n return failure({message: result.detail, invalidObject: object});\n }\n return result;\n}\n\n/**\n * Parses a PerseusArticle from a JSON string, migrates old formats to the\n * latest schema, and runtime-typechecks the result.\n *\n * @returns a {@link Result} of the parsed PerseusArticle. If the result is a\n * failure, it will contain an error message describing where in the tree\n * parsing failed.\n * @throws SyntaxError if the argument is not well-formed JSON.\n */\nexport function parseAndMigratePerseusArticle(\n json: string,\n): Result<PerseusArticle, ParseFailureDetail> {\n throwErrorIfCheatingDetected();\n const object: unknown = JSON.parse(json);\n const result = parse(object, migrateAndTypecheckPerseusArticle);\n if (isFailure(result)) {\n return failure({message: result.detail, invalidObject: object});\n }\n return result;\n}\n\n/**\n * Tries to block a cheating vector that relies on monkey-patching JSON.parse.\n */\n// TODO(LEMS-2331): delete this function once server-side scoring is done.\nfunction throwErrorIfCheatingDetected() {\n if (!isRealJSONParse(JSON.parse)) {\n throw new Error(\"Something went wrong.\");\n }\n}\n","/**\n * Adds the given perseus library version information to the __perseus_debug__\n * object and ensures that the object is attached to `globalThis` (`window` in\n * browser environments).\n *\n * This allows each library to provide runtime version information to assist in\n * debugging in production environments.\n */\nexport const addLibraryVersionToPerseusDebug = (\n libraryName: string,\n libraryVersion: string,\n) => {\n // If the library version is the default value, then we don't want to\n // prefix it with a \"v\" to indicate that it is a version number.\n let prefix = \"v\";\n if (libraryVersion === \"__lib_version__\") {\n prefix = \"\";\n }\n const formattedVersion = `${prefix}${libraryVersion}`;\n\n if (typeof globalThis !== \"undefined\") {\n globalThis.__perseus_debug__ = globalThis.__perseus_debug__ ?? {};\n\n const existingVersionEntry = globalThis.__perseus_debug__[libraryName];\n if (existingVersionEntry) {\n // If we already have an entry and it doesn't match the registered\n // version, we morph the entry into an array and log a warning.\n if (existingVersionEntry !== formattedVersion) {\n // Existing entry might be an array already (oops, at least 2\n // versions of the library already loaded!).\n const allVersions = Array.isArray(existingVersionEntry)\n ? existingVersionEntry\n : [existingVersionEntry];\n allVersions.push(formattedVersion);\n\n globalThis.__perseus_debug__[libraryName] = allVersions;\n\n // eslint-disable-next-line no-console\n console.warn(\n `Multiple versions of ${libraryName} loaded on this page: ${allVersions\n .sort()\n .join(\", \")}`,\n );\n }\n } else {\n globalThis.__perseus_debug__[libraryName] = formattedVersion;\n }\n } else {\n // eslint-disable-next-line no-console\n console.warn(`globalThis not found found (${formattedVersion})`);\n }\n};\n","// 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\n// We use a shared, symlinked directory to bring in this function so that we\n// don't need to have cross-package dependencies just for a few hundred bytes\n// of shared code.\n// ESLint's import/no-relative-packages doesn't understand symlinks! If this\n// lint suppression is removed, it autofixes the import path to an invalid\n// package+path entry.\n// eslint-disable-next-line import/no-relative-packages\nimport {addLibraryVersionToPerseusDebug} from \"./shared-utils/add-library-version-to-perseus-debug\";\n\nconst libName = \"@khanacademy/perseus-core\";\nexport const libVersion = \"__lib_version__\";\n\naddLibraryVersionToPerseusDebug(libName, libVersion);\n","/**\n * @typedef {Object} Errors utility for referencing the Perseus error taxonomy.\n */\nexport const Errors = Object.freeze({\n /**\n * @property {ErrorKind} Unknown The kind of error is not known.\n */\n Unknown: \"Unknown\",\n /**\n * @property {ErrorKind} Internal The error is internal to the executing code.\n */\n Internal: \"Internal\",\n /**\n * @property {ErrorKind} InvalidInput There was a problem with the provided\n * input, such as the wrong format or a null value.\n */\n InvalidInput: \"InvalidInput\",\n /**\n * @property {ErrorKind} NotAllowed There was a problem due to the state of\n * the system not matching the requested operation or input. For example,\n * trying to create a username that is valid, but is already taken by\n * another user. Use {@link InvalidInput} instead when the input isn't\n * valid regardless of the state of the system. Use {@link NotFound} when\n * the failure is due to not being able to find a resource.\n */\n NotAllowed: \"NotAllowed\",\n /**\n * @property {ErrorKind} TransientService There was a problem when making a\n * request to a service.\n */\n TransientService: \"TransientService\",\n /**\n * @property {ErrorKind} Service There was a non-transient problem when\n * making a request to service.\n */\n Service: \"Service\",\n});\n\n/**\n * @type {ErrorKind} The kind of error being reported\n */\nexport type ErrorKind = (typeof Errors)[keyof typeof Errors];\n","import type {ErrorKind} from \"./errors\";\nimport type {Metadata} from \"@khanacademy/wonder-stuff-core\";\n\ntype Options = {\n metadata?: Metadata | null | undefined;\n};\n\nexport class PerseusError extends Error {\n kind: ErrorKind;\n metadata: Metadata | null | undefined;\n\n constructor(message: string, kind: ErrorKind, options?: Options) {\n super(message);\n this.kind = kind;\n this.metadata = options?.metadata;\n }\n}\n","/**\n * _ utilities for objects\n */\n\nimport _ from \"underscore\";\n\n/**\n * Does a pluck on keys inside objects in an object\n *\n * Ex:\n * tools = {\n * translation: {\n * enabled: true\n * },\n * rotation: {\n * enabled: false\n * }\n * };\n * pluckObject(tools, \"enabled\") returns {\n * translation: true\n * rotation: false\n * }\n */\nexport const pluck = function (table: any, subKey: string): any {\n return _.object(\n _.map(table, function (value, key) {\n return [key, value[subKey]];\n }),\n );\n};\n\n/**\n * Maps an object to an object\n *\n * > mapObject({a: '1', b: '2'}, (value, key) => {\n * return value + 1;\n * });\n * {a: 2, b: 3}\n */\nexport const mapObject = function <K extends string, V, U>(\n obj: Record<K, V>,\n lambda: (arg1: V, arg2: K) => U,\n): Record<K, U> {\n const result: Record<string, any> = {};\n Object.keys(obj).forEach((key) => {\n // @ts-expect-error - TS2345 - Argument of type 'string' is not assignable to parameter of type 'K'.\n result[key] = lambda(obj[key], key);\n });\n return result;\n};\n","import type {PerseusCategorizerWidgetOptions} from \"@khanacademy/perseus-core\";\n\n/**\n * For details on the individual options, see the\n * PerseusCategorizerWidgetOptions type\n */\ntype CategorizerPublicWidgetOptions = {\n items: PerseusCategorizerWidgetOptions[\"items\"];\n categories: PerseusCategorizerWidgetOptions[\"categories\"];\n randomizeItems: PerseusCategorizerWidgetOptions[\"randomizeItems\"];\n static: PerseusCategorizerWidgetOptions[\"static\"];\n};\n\n/**\n * Given a PerseusCategorizerWidgetOptions object, return a new object with only\n * the public options that should be exposed to the client.\n */\nfunction getCategorizerPublicWidgetOptions(\n options: PerseusCategorizerWidgetOptions,\n): CategorizerPublicWidgetOptions {\n return {\n items: options.items,\n categories: options.categories,\n randomizeItems: options.randomizeItems,\n static: options.static,\n };\n}\n\nexport default getCategorizerPublicWidgetOptions;\n","import getCategorizerPublicWidgetOptions from \"./categorizer-util\";\n\nimport type {PerseusCategorizerWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type CategorizerDefaultWidgetOptions = Pick<\n PerseusCategorizerWidgetOptions,\n \"items\" | \"categories\" | \"values\" | \"randomizeItems\"\n>;\n\nconst defaultWidgetOptions: CategorizerDefaultWidgetOptions = {\n items: [],\n categories: [],\n values: [],\n randomizeItems: false,\n};\n\nconst categorizerWidgetLogic: WidgetLogic = {\n name: \"categorizer\",\n defaultWidgetOptions,\n getPublicWidgetOptions: getCategorizerPublicWidgetOptions,\n};\n\nexport default categorizerWidgetLogic;\n","import type {PerseusCSProgramWidgetOptions} from \"../../data-schema\";\n\nexport default function getCSProgramPublicWidgetOptions(\n options: PerseusCSProgramWidgetOptions,\n): PerseusCSProgramWidgetOptions {\n return options;\n}\n","import getCSProgramPublicWidgetOptions from \"./cs-program-util\";\n\nimport type {PerseusCSProgramWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type CSProgramDefaultWidgetOptions = Pick<\n PerseusCSProgramWidgetOptions,\n | \"programID\"\n | \"programType\"\n | \"settings\"\n | \"showEditor\"\n | \"showButtons\"\n | \"height\"\n>;\n\nconst DEFAULT_HEIGHT = 400;\n\nconst defaultWidgetOptions: CSProgramDefaultWidgetOptions = {\n programID: \"\",\n programType: null,\n settings: [{name: \"\", value: \"\"}],\n showEditor: false,\n showButtons: false,\n height: DEFAULT_HEIGHT,\n};\n\nconst csProgramWidgetLogic: WidgetLogic = {\n name: \"cs-program\",\n defaultWidgetOptions,\n supportedAlignments: [\"block\", \"full-width\"],\n getPublicWidgetOptions: getCSProgramPublicWidgetOptions,\n};\n\nexport default csProgramWidgetLogic;\n","import type {PerseusDefinitionWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type DefinitionDefaultWidgetOptions = Pick<\n PerseusDefinitionWidgetOptions,\n \"togglePrompt\" | \"definition\"\n>;\n\nconst defaultWidgetOptions: DefinitionDefaultWidgetOptions = {\n togglePrompt: \"\",\n definition: \"\",\n};\n\nconst definitionWidgetLogic: WidgetLogic = {\n name: \"definition\",\n defaultWidgetOptions,\n defaultAlignment: \"inline\",\n};\n\nexport default definitionWidgetLogic;\n","import type {PerseusDropdownWidgetOptions} from \"@khanacademy/perseus-core\";\n\n/**\n * For details on the individual options, see the\n * PerseusDropdownWidgetOptions type\n */\nexport type DropdownPublicWidgetOptions = {\n choices: ReadonlyArray<{content: string}>;\n placeholder: PerseusDropdownWidgetOptions[\"placeholder\"];\n static: PerseusDropdownWidgetOptions[\"static\"];\n visibleLabel?: PerseusDropdownWidgetOptions[\"visibleLabel\"];\n ariaLabel?: PerseusDropdownWidgetOptions[\"ariaLabel\"];\n};\n\n/**\n * Given a PerseusDropdownWidgetOptions object, return a new object with only\n * the public options that should be exposed to the client.\n */\nfunction getDropdownPublicWidgetOptions(\n options: PerseusDropdownWidgetOptions,\n): DropdownPublicWidgetOptions {\n return {\n choices: options.choices.map((choice) => ({content: choice.content})),\n placeholder: options.placeholder,\n static: options.static,\n visibleLabel: options.visibleLabel,\n ariaLabel: options.ariaLabel,\n };\n}\n\nexport default getDropdownPublicWidgetOptions;\n","import getDropdownPublicWidgetOptions from \"./dropdown-util\";\n\nimport type {PerseusDropdownWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type DropdownDefaultWidgetOptions = Pick<\n PerseusDropdownWidgetOptions,\n \"placeholder\" | \"choices\"\n>;\n\nconst defaultWidgetOptions: DropdownDefaultWidgetOptions = {\n placeholder: \"\",\n choices: [\n {\n content: \"\",\n correct: false,\n },\n ],\n};\n\nconst dropdownWidgetLogic: WidgetLogic = {\n name: \"definition\",\n defaultWidgetOptions,\n defaultAlignment: \"inline-block\",\n getPublicWidgetOptions: getDropdownPublicWidgetOptions,\n};\n\nexport default dropdownWidgetLogic;\n","import type {PerseusExplanationWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type ExplanationDefaultWidgetOptions = Pick<\n PerseusExplanationWidgetOptions,\n \"showPrompt\" | \"hidePrompt\" | \"explanation\" | \"widgets\"\n>;\n\nconst defaultWidgetOptions: ExplanationDefaultWidgetOptions = {\n showPrompt: \"Explain\",\n hidePrompt: \"Hide explanation\",\n explanation: \"explanation goes here\\n\\nmore explanation\",\n widgets: {},\n};\n\nconst explanationWidgetLogic: WidgetLogic = {\n name: \"explanation\",\n defaultWidgetOptions,\n defaultAlignment: \"inline\",\n};\n\nexport default explanationWidgetLogic;\n","import type {PerseusExpressionWidgetOptions} from \"../../data-schema\";\n\nexport const currentVersion = {major: 1, minor: 0};\n\nexport const widgetOptionsUpgrades = {\n \"1\": (v0options: any): PerseusExpressionWidgetOptions => ({\n times: v0options.times,\n buttonSets: v0options.buttonSets,\n functions: v0options.functions,\n buttonsVisible: v0options.buttonsVisible,\n visibleLabel: v0options.visibleLabel,\n ariaLabel: v0options.ariaLabel,\n\n answerForms: [\n {\n considered: \"correct\",\n form: v0options.form,\n simplify: v0options.simplify,\n value: v0options.value,\n },\n ],\n }),\n} as const;\n\nexport type ExpressionDefaultWidgetOptions = Pick<\n PerseusExpressionWidgetOptions,\n \"answerForms\" | \"times\" | \"buttonSets\" | \"functions\"\n>;\n\nexport const defaultWidgetOptions: ExpressionDefaultWidgetOptions = {\n answerForms: [],\n times: false,\n buttonSets: [\"basic\"],\n functions: [\"f\", \"g\", \"h\"],\n};\n","import type {PerseusExpressionWidgetOptions} from \"@khanacademy/perseus-core\";\n\n/**\n * For details on the individual options, see the\n * PerseusExpressionWidgetOptions type\n */\ntype ExpressionPublicWidgetOptions = {\n buttonSets: PerseusExpressionWidgetOptions[\"buttonSets\"];\n functions: PerseusExpressionWidgetOptions[\"functions\"];\n times: PerseusExpressionWidgetOptions[\"times\"];\n visibleLabel?: PerseusExpressionWidgetOptions[\"visibleLabel\"];\n ariaLabel?: PerseusExpressionWidgetOptions[\"ariaLabel\"];\n buttonsVisible?: PerseusExpressionWidgetOptions[\"buttonsVisible\"];\n};\n\n/**\n * Given a PerseusExpressionWidgetOptions object, return a new object with only\n * the public options that should be exposed to the client.\n */\nfunction getExpressionPublicWidgetOptions(\n options: PerseusExpressionWidgetOptions,\n): ExpressionPublicWidgetOptions {\n return {\n buttonSets: options.buttonSets,\n functions: options.functions,\n times: options.times,\n visibleLabel: options.visibleLabel,\n ariaLabel: options.ariaLabel,\n buttonsVisible: options.buttonsVisible,\n };\n}\n\nexport default getExpressionPublicWidgetOptions;\n","import {\n currentVersion,\n defaultWidgetOptions,\n widgetOptionsUpgrades,\n} from \"./expression-upgrade\";\nimport getExpressionPublicWidgetOptions from \"./expression-util\";\n\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type {ExpressionDefaultWidgetOptions} from \"./expression-upgrade\";\n\nconst expressionWidgetLogic: WidgetLogic = {\n name: \"expression\",\n version: currentVersion,\n widgetOptionsUpgrades: widgetOptionsUpgrades,\n defaultWidgetOptions: defaultWidgetOptions,\n defaultAlignment: \"inline-block\",\n getPublicWidgetOptions: getExpressionPublicWidgetOptions,\n};\n\nexport default expressionWidgetLogic;\n","import type {PerseusGradedGroupWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type GradedGroupDefaultWidgetOptions = Pick<\n PerseusGradedGroupWidgetOptions,\n \"title\" | \"content\" | \"widgets\" | \"images\" | \"hint\"\n>;\n\nconst defaultWidgetOptions: GradedGroupDefaultWidgetOptions = {\n title: \"\",\n content: \"\",\n widgets: {},\n images: {},\n hint: null,\n};\n\nconst gradedGroupWidgetLogic: WidgetLogic = {\n name: \"graded-group\",\n defaultWidgetOptions,\n};\n\nexport default gradedGroupWidgetLogic;\n","import type {PerseusGradedGroupSetWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type GradedGroupSetDefaultWidgetOptions = Pick<\n PerseusGradedGroupSetWidgetOptions,\n \"gradedGroups\"\n>;\n\nconst defaultWidgetOptions: GradedGroupSetDefaultWidgetOptions = {\n gradedGroups: [],\n};\n\nconst gradedGroupSetWidgetLogic: WidgetLogic = {\n name: \"graded-group-set\",\n defaultWidgetOptions,\n};\n\nexport default gradedGroupSetWidgetLogic;\n","import type {PerseusGrapherWidgetOptions} from \"../../data-schema\";\n\ntype GrapherPublicWidgetOptions = Pick<\n PerseusGrapherWidgetOptions,\n \"availableTypes\" | \"graph\"\n>;\n\nexport default function getGrapherPublicWidgetOptions(\n options: PerseusGrapherWidgetOptions,\n): GrapherPublicWidgetOptions {\n const {correct: _, ...publicOptions} = options;\n return publicOptions;\n}\n","import getGrapherPublicWidgetOptions from \"./grapher-util\";\n\nimport type {PerseusGrapherWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type GrapherDefaultWidgetOptions = Pick<\n PerseusGrapherWidgetOptions,\n \"graph\" | \"correct\" | \"availableTypes\"\n>;\n\nconst defaultWidgetOptions: GrapherDefaultWidgetOptions = {\n graph: {\n labels: [\"x\", \"y\"],\n range: [\n [-10, 10],\n [-10, 10],\n ],\n step: [1, 1],\n backgroundImage: {\n url: null,\n },\n markings: \"graph\",\n rulerLabel: \"\",\n rulerTicks: 10,\n valid: true,\n showTooltips: false,\n },\n correct: {\n type: \"linear\",\n coords: null,\n },\n availableTypes: [\"linear\"],\n};\n\nconst grapherWidgetLogic: WidgetLogic = {\n name: \"grapher\",\n defaultWidgetOptions,\n getPublicWidgetOptions: getGrapherPublicWidgetOptions,\n};\n\nexport default grapherWidgetLogic;\n","import type {PerseusGroupWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type GroupDefaultWidgetOptions = Pick<\n PerseusGroupWidgetOptions,\n \"content\" | \"widgets\" | \"images\"\n>;\n\nconst defaultWidgetOptions: GroupDefaultWidgetOptions = {\n content: \"\",\n widgets: {},\n images: {},\n};\n\nconst groupWidgetLogic: WidgetLogic = {\n name: \"group\",\n defaultWidgetOptions,\n};\n\nexport default groupWidgetLogic;\n","import type {PerseusIFrameWidgetOptions} from \"../../data-schema\";\n\nexport default function getIFramePublicWidgetOptions(\n options: PerseusIFrameWidgetOptions,\n): PerseusIFrameWidgetOptions {\n return options;\n}\n","import getIFramePublicWidgetOptions from \"./iframe-util\";\n\nimport type {PerseusIFrameWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type IFrameDefaultWidgetOptions = Pick<\n PerseusIFrameWidgetOptions,\n | \"url\"\n | \"settings\"\n | \"width\"\n | \"height\"\n | \"allowFullScreen\"\n | \"allowTopNavigation\"\n>;\n\nconst defaultWidgetOptions: IFrameDefaultWidgetOptions = {\n url: \"\",\n settings: [{name: \"\", value: \"\"}],\n width: \"400\",\n height: \"400\",\n allowFullScreen: false,\n allowTopNavigation: false,\n};\n\nconst iframeWidgetLogic: WidgetLogic = {\n name: \"iframe\",\n defaultWidgetOptions,\n getPublicWidgetOptions: getIFramePublicWidgetOptions,\n};\n\nexport default iframeWidgetLogic;\n","import type {PerseusImageWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type ImageDefaultWidgetOptions = Pick<\n PerseusImageWidgetOptions,\n \"title\" | \"range\" | \"box\" | \"backgroundImage\" | \"labels\" | \"alt\" | \"caption\"\n>;\n\nconst defaultWidgetOptions: ImageDefaultWidgetOptions = {\n title: \"\",\n range: [\n [0, 10],\n [0, 10],\n ],\n box: [400, 400],\n backgroundImage: {\n url: null,\n width: 0,\n height: 0,\n },\n labels: [],\n alt: \"\",\n caption: \"\",\n};\n\nconst imageWidgetLogic: WidgetLogic = {\n name: \"image\",\n defaultWidgetOptions,\n supportedAlignments: [\"block\", \"full-width\"],\n defaultAlignment: \"block\",\n};\n\nexport default imageWidgetLogic;\n","import type {PerseusInputNumberWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type InputNumberDefaultWidgetOptions = Pick<\n PerseusInputNumberWidgetOptions,\n | \"value\"\n | \"simplify\"\n | \"size\"\n | \"inexact\"\n | \"maxError\"\n | \"answerType\"\n | \"rightAlign\"\n>;\n\nconst defaultWidgetOptions: InputNumberDefaultWidgetOptions = {\n value: 0,\n simplify: \"required\",\n size: \"normal\",\n inexact: false,\n maxError: 0.1,\n answerType: \"number\",\n rightAlign: false,\n};\n\nconst inputNumberWidgetLogic: WidgetLogic = {\n name: \"input-number\",\n defaultWidgetOptions,\n defaultAlignment: \"inline-block\",\n};\n\nexport default inputNumberWidgetLogic;\n","import type {PerseusInteractionWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type InteractionDefaultWidgetOptions = Pick<\n PerseusInteractionWidgetOptions,\n \"graph\" | \"elements\"\n>;\n\nconst defaultWidgetOptions: InteractionDefaultWidgetOptions = {\n graph: {\n box: [400, 400],\n labels: [\"x\", \"y\"],\n range: [\n [-10, 10],\n [-10, 10],\n ],\n tickStep: [1, 1],\n gridStep: [1, 1],\n markings: \"graph\",\n },\n elements: [],\n};\n\nconst interactionWidgetLogic: WidgetLogic = {\n name: \"interaction\",\n defaultWidgetOptions,\n};\n\nexport default interactionWidgetLogic;\n","import type {PerseusInteractiveGraphWidgetOptions} from \"@khanacademy/perseus-core\";\n\nexport type InteractiveGraphPublicWidgetOptions = Pick<\n PerseusInteractiveGraphWidgetOptions,\n | \"step\"\n | \"gridStep\"\n | \"snapStep\"\n | \"backgroundImage\"\n | \"markings\"\n | \"labels\"\n | \"showProtractor\"\n | \"showRuler\"\n | \"showTooltips\"\n | \"rulerLabel\"\n | \"rulerTicks\"\n | \"range\"\n | \"graph\"\n | \"lockedFigures\"\n | \"fullGraphAriaLabel\"\n | \"fullGraphAriaDescription\"\n>;\n\nexport default function getInteractiveGraphPublicWidgetOptions(\n options: PerseusInteractiveGraphWidgetOptions,\n): InteractiveGraphPublicWidgetOptions {\n const {correct: _, ...publicOptions} = options;\n return publicOptions;\n}\n","import getInteractiveGraphPublicWidgetOptions from \"./interactive-graph-util\";\n\nimport type {PerseusInteractiveGraphWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type InteractiveGraphDefaultWidgetOptions = Pick<\n PerseusInteractiveGraphWidgetOptions,\n | \"labels\"\n | \"range\"\n | \"step\"\n | \"backgroundImage\"\n | \"markings\"\n | \"showTooltips\"\n | \"showProtractor\"\n | \"graph\"\n | \"correct\"\n>;\n\nconst defaultWidgetOptions: InteractiveGraphDefaultWidgetOptions = {\n labels: [\"x\", \"y\"],\n range: [\n [-10, 10],\n [-10, 10],\n ],\n step: [1, 1],\n backgroundImage: {\n url: null,\n },\n markings: \"graph\",\n showTooltips: false,\n showProtractor: false,\n graph: {\n type: \"linear\",\n },\n correct: {\n type: \"linear\",\n coords: null,\n },\n};\n\nconst interactiveGraphWidgetLogic: WidgetLogic = {\n name: \"interactive-graph\",\n defaultWidgetOptions,\n getPublicWidgetOptions: getInteractiveGraphPublicWidgetOptions,\n};\n\nexport default interactiveGraphWidgetLogic;\n","import type {\n PerseusLabelImageMarker,\n PerseusLabelImageWidgetOptions,\n} from \"@khanacademy/perseus-core\";\n\n/**\n * For details on the individual options, see the\n * PerseusLabelImageWidgetOptions type\n */\ntype LabelImagePublicWidgetOptions = {\n choices: PerseusLabelImageWidgetOptions[\"choices\"];\n imageUrl: PerseusLabelImageWidgetOptions[\"imageUrl\"];\n imageAlt: PerseusLabelImageWidgetOptions[\"imageAlt\"];\n imageHeight: PerseusLabelImageWidgetOptions[\"imageHeight\"];\n imageWidth: PerseusLabelImageWidgetOptions[\"imageWidth\"];\n markers: ReadonlyArray<LabelImageMarkerPublicData>;\n hideChoicesFromInstructions: PerseusLabelImageWidgetOptions[\"hideChoicesFromInstructions\"];\n multipleAnswers: PerseusLabelImageWidgetOptions[\"multipleAnswers\"];\n static: PerseusLabelImageWidgetOptions[\"static\"];\n};\n\ntype LabelImageMarkerPublicData = Pick<\n PerseusLabelImageMarker,\n \"x\" | \"y\" | \"label\"\n>;\n\nexport default function getLabelImagePublicWidgetOptions(\n options: PerseusLabelImageWidgetOptions,\n): LabelImagePublicWidgetOptions {\n return {\n ...options,\n markers: options.markers.map(getLabelImageMarkerPublicData),\n };\n}\n\nfunction getLabelImageMarkerPublicData(\n marker: PerseusLabelImageMarker,\n): LabelImageMarkerPublicData {\n const {answers: _, ...publicData} = marker;\n return publicData;\n}\n","import getLabelImagePublicWidgetOptions from \"./label-image-util\";\n\nimport type {PerseusLabelImageWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type LabelImageDefaultWidgetOptions = Pick<\n PerseusLabelImageWidgetOptions,\n | \"choices\"\n | \"imageAlt\"\n | \"imageUrl\"\n | \"imageWidth\"\n | \"imageHeight\"\n | \"markers\"\n | \"multipleAnswers\"\n | \"hideChoicesFromInstructions\"\n>;\n\nconst defaultWidgetOptions: LabelImageDefaultWidgetOptions = {\n choices: [],\n imageAlt: \"\",\n imageUrl: \"\",\n imageWidth: 0,\n imageHeight: 0,\n markers: [],\n multipleAnswers: false,\n hideChoicesFromInstructions: false,\n};\n\nconst labelImageWidgetLogic: WidgetLogic = {\n name: \"label-image\",\n defaultWidgetOptions,\n getPublicWidgetOptions: getLabelImagePublicWidgetOptions,\n};\n\nexport default labelImageWidgetLogic;\n","import {seededRNG, shuffle} from \"@khanacademy/perseus-core\";\n\nimport type {PerseusMatcherWidgetOptions} from \"@khanacademy/perseus-core\";\n\n// TODO(LEMS-2841): Should be able to remove once getPublicWidgetOptions is hooked up\ntype MatcherInfo = {\n left: ReadonlyArray<string>;\n right: ReadonlyArray<string>;\n orderMatters: boolean;\n problemNum: number | null | undefined;\n};\n\ntype MatcherShuffleInfo = {\n left: ReadonlyArray<string>;\n right: ReadonlyArray<string>;\n orderMatters: boolean;\n};\n\n// TODO(LEMS-2841): Should be able to remove once getPublicWidgetOptions is hooked up\nexport const shuffleMatcher = (\n props: MatcherInfo,\n): {left: ReadonlyArray<string>; right: ReadonlyArray<string>} => {\n // Use the same random() function to shuffle both columns sequentially\n const rng = seededRNG(props.problemNum as number);\n\n let left;\n if (!props.orderMatters) {\n // If the order doesn't matter, don't shuffle the left column\n left = props.left;\n } else {\n left = shuffle(props.left, rng, /* ensurePermuted */ true);\n }\n\n const right = shuffle(props.right, rng, /* ensurePermuted */ true);\n\n return {left, right};\n};\n\n// TODO(LEMS-2841): Can shorten to shuffleMatcher after above function removed\nfunction shuffleMatcherWithRandom(data: MatcherShuffleInfo): {\n left: ReadonlyArray<string>;\n right: ReadonlyArray<string>;\n} {\n // Use the same random() function to shuffle both columns sequentially\n let left;\n if (!data.orderMatters) {\n // If the order doesn't matter, don't shuffle the left column\n left = data.left;\n } else {\n left = shuffle(data.left, Math.random, /* ensurePermuted */ true);\n }\n\n const right = shuffle(data.right, Math.random, /* ensurePermuted */ true);\n\n return {left, right};\n}\n\n/**\n * For details on the individual options, see the\n * PerseusMatcherWidgetOptions type\n */\ntype MatcherPublicWidgetOptions = {\n labels: PerseusMatcherWidgetOptions[\"labels\"];\n left: PerseusMatcherWidgetOptions[\"left\"];\n right: PerseusMatcherWidgetOptions[\"right\"];\n orderMatters: PerseusMatcherWidgetOptions[\"orderMatters\"];\n padding: PerseusMatcherWidgetOptions[\"padding\"];\n};\n\n/**\n * Given a PerseusMatcherWidgetOptions object, return a new object with only\n * the public options that should be exposed to the client.\n */\nfunction getMatcherPublicWidgetOptions(\n options: PerseusMatcherWidgetOptions,\n): MatcherPublicWidgetOptions {\n const {left, right} = shuffleMatcherWithRandom(options);\n\n return {\n ...options,\n left: left,\n right: right,\n };\n}\n\nexport default getMatcherPublicWidgetOptions;\n","import getMatcherPublicWidgetOptions from \"./matcher-util\";\n\nimport type {PerseusMatcherWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type MatcherDefaultWidgetOptions = Pick<\n PerseusMatcherWidgetOptions,\n \"left\" | \"right\" | \"labels\" | \"orderMatters\" | \"padding\"\n>;\n\nconst defaultWidgetOptions: MatcherDefaultWidgetOptions = {\n left: [\"$x$\", \"$y$\", \"$z$\"],\n right: [\"$1$\", \"$2$\", \"$3$\"],\n labels: [\"test\", \"label\"],\n orderMatters: false,\n padding: true,\n};\n\nconst matcherWidgetLogic: WidgetLogic = {\n name: \"matcher\",\n defaultWidgetOptions,\n getPublicWidgetOptions: getMatcherPublicWidgetOptions,\n};\n\nexport default matcherWidgetLogic;\n","import type {PerseusMatrixWidgetOptions} from \"@khanacademy/perseus-core\";\n\ntype MatrixPublicWidgetOptions = Pick<\n PerseusMatrixWidgetOptions,\n \"prefix\" | \"suffix\" | \"cursorPosition\" | \"matrixBoardSize\" | \"static\"\n>;\n\nexport default function getMatrixPublicWidgetOptions(\n options: PerseusMatrixWidgetOptions,\n): MatrixPublicWidgetOptions {\n const {answers: _, ...publicOptions} = options;\n return publicOptions;\n}\n","import getMatrixPublicWidgetOptions from \"./matrix-util\";\n\nimport type {PerseusMatrixWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type MatrixDefaultWidgetOptions = Pick<\n PerseusMatrixWidgetOptions,\n \"matrixBoardSize\" | \"answers\" | \"prefix\" | \"suffix\" | \"cursorPosition\"\n>;\n\nconst defaultWidgetOptions: MatrixDefaultWidgetOptions = {\n matrixBoardSize: [3, 3],\n answers: [[]],\n prefix: \"\",\n suffix: \"\",\n cursorPosition: [0, 0],\n};\n\nconst matrixWidgetLogic: WidgetLogic = {\n name: \"matrix\",\n defaultWidgetOptions,\n getPublicWidgetOptions: getMatrixPublicWidgetOptions,\n};\n\nexport default matrixWidgetLogic;\n","import type {PerseusMeasurerWidgetOptions} from \"../../data-schema\";\n\nexport const currentVersion = {major: 1, minor: 0};\n\nexport const widgetOptionsUpgrades = {\n \"1\": (v0options: any): PerseusMeasurerWidgetOptions => {\n const {imageUrl, imageTop, imageLeft, ...rest} = v0options;\n\n return {\n ...rest,\n image: {\n url: imageUrl,\n top: imageTop,\n left: imageLeft,\n },\n };\n },\n} as const;\n\nexport type MeasurerDefaultWidgetOptions = Pick<\n PerseusMeasurerWidgetOptions,\n | \"box\"\n | \"image\"\n | \"showProtractor\"\n | \"showRuler\"\n | \"rulerLabel\"\n | \"rulerTicks\"\n | \"rulerPixels\"\n | \"rulerLength\"\n>;\n\nexport const defaultWidgetOptions: MeasurerDefaultWidgetOptions = {\n box: [480, 480],\n image: {} as any,\n showProtractor: true,\n showRuler: false,\n rulerLabel: \"\",\n rulerTicks: 10,\n rulerPixels: 40,\n rulerLength: 10,\n};\n","import {\n currentVersion,\n defaultWidgetOptions,\n widgetOptionsUpgrades,\n} from \"./measurer-upgrade\";\n\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type {MeasurerDefaultWidgetOptions} from \"./measurer-upgrade\";\n\nconst measurerWidgetLogic: WidgetLogic = {\n name: \"measurer\",\n version: currentVersion,\n widgetOptionsUpgrades: widgetOptionsUpgrades,\n defaultWidgetOptions: defaultWidgetOptions,\n};\n\nexport default measurerWidgetLogic;\n","import type {PerseusNumberLineWidgetOptions} from \"../../data-schema\";\n\ntype NumberLinePublicWidgetOptions = Pick<\n PerseusNumberLineWidgetOptions,\n | \"range\"\n | \"labelRange\"\n | \"labelStyle\"\n | \"labelTicks\"\n | \"isTickCtrl\"\n | \"divisionRange\"\n | \"numDivisions\"\n | \"snapDivisions\"\n | \"tickStep\"\n | \"initialX\"\n | \"showTooltips\"\n | \"static\"\n>;\n\nexport default function getNumberLinePublicWidgetOptions(\n options: PerseusNumberLineWidgetOptions,\n): NumberLinePublicWidgetOptions {\n const {correctX: _, correctRel: __, ...publicOptions} = options;\n return publicOptions;\n}\n","import getNumberLinePublicWidgetOptions from \"./number-line-util\";\n\nimport type {PerseusNumberLineWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type NumberLineDefaultWidgetOptions = Pick<\n PerseusNumberLineWidgetOptions,\n | \"range\"\n | \"labelRange\"\n | \"labelStyle\"\n | \"labelTicks\"\n | \"divisionRange\"\n | \"numDivisions\"\n | \"snapDivisions\"\n | \"tickStep\"\n | \"correctRel\"\n | \"correctX\"\n | \"initialX\"\n | \"showTooltips\"\n>;\n\nconst defaultWidgetOptions: NumberLineDefaultWidgetOptions = {\n range: [0, 10],\n\n labelRange: [null, null],\n labelStyle: \"decimal\",\n labelTicks: true,\n\n divisionRange: [1, 12],\n numDivisions: 5,\n snapDivisions: 2,\n\n tickStep: null,\n correctRel: \"eq\",\n correctX: null,\n initialX: null,\n\n showTooltips: false,\n};\n\nconst numberLineWidgetLogic: WidgetLogic = {\n name: \"number-line\",\n defaultWidgetOptions,\n getPublicWidgetOptions: getNumberLinePublicWidgetOptions,\n};\n\nexport default numberLineWidgetLogic;\n","import type {\n PerseusNumericInputAnswer,\n PerseusNumericInputWidgetOptions,\n} from \"@khanacademy/perseus-core\";\n\ntype NumericInputAnswerPublicData = Pick<\n PerseusNumericInputAnswer,\n \"answerForms\" | \"simplify\" | \"status\"\n>;\n\n/**\n * For details on the individual options, see the\n * PerseusNumericInputWidgetOptions type\n */\ntype NumericInputPublicWidgetOptions = {\n labelText?: PerseusNumericInputWidgetOptions[\"labelText\"];\n size: PerseusNumericInputWidgetOptions[\"size\"];\n coefficient: PerseusNumericInputWidgetOptions[\"coefficient\"];\n rightAlign?: PerseusNumericInputWidgetOptions[\"rightAlign\"];\n static: PerseusNumericInputWidgetOptions[\"static\"];\n answers: ReadonlyArray<NumericInputAnswerPublicData>;\n};\n\n/**\n * This data from `answers` is used pre-scoring to give hints\n * to the learner regarding the format of accepted answers\n */\nfunction getNumericInputAnswerPublicData(\n answer: PerseusNumericInputAnswer,\n): NumericInputAnswerPublicData {\n const {answerForms, simplify, status} = answer;\n return {\n answerForms,\n simplify,\n status,\n };\n}\n\n/**\n * Given a PerseusNumericInputWidgetOptions object, return a new object with only\n * the public options that should be exposed to the client.\n */\nfunction getNumericInputPublicWidgetOptions(\n options: PerseusNumericInputWidgetOptions,\n): NumericInputPublicWidgetOptions {\n const {answers, ...publicWidgetOptions} = options;\n return {\n ...publicWidgetOptions,\n answers: answers.map(getNumericInputAnswerPublicData),\n };\n}\n\nexport default getNumericInputPublicWidgetOptions;\n","import getNumericInputPublicWidgetOptions from \"./numeric-input-util\";\n\nimport type {PerseusNumericInputWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type NumericInputDefaultWidgetOptions = Pick<\n PerseusNumericInputWidgetOptions,\n \"answers\" | \"size\" | \"coefficient\" | \"labelText\" | \"rightAlign\"\n>;\n\nconst defaultWidgetOptions: NumericInputDefaultWidgetOptions = {\n answers: [\n {\n value: null,\n status: \"correct\",\n message: \"\",\n simplify: \"required\",\n answerForms: [],\n strict: false,\n maxError: null,\n },\n ],\n size: \"normal\",\n coefficient: false,\n labelText: \"\",\n rightAlign: false,\n};\n\nconst numericInputWidgetLogic: WidgetLogic = {\n name: \"numeric-input\",\n defaultWidgetOptions,\n defaultAlignment: \"inline-block\",\n getPublicWidgetOptions: getNumericInputPublicWidgetOptions,\n};\n\nexport default numericInputWidgetLogic;\n","import type {PerseusOrdererWidgetOptions} from \"@khanacademy/perseus-core\";\n\n/**\n * For details on the individual options, see the\n * PerseusOrdererWidgetOptions type\n */\ntype OrdererPublicWidgetOptions = {\n options: PerseusOrdererWidgetOptions[\"options\"];\n height: PerseusOrdererWidgetOptions[\"height\"];\n layout: PerseusOrdererWidgetOptions[\"layout\"];\n};\n\n/**\n * Given a PerseusOrdererWidgetOptions object, return a new object with only\n * the public options that should be exposed to the client.\n */\nfunction getOrdererPublicWidgetOptions(\n options: PerseusOrdererWidgetOptions,\n): OrdererPublicWidgetOptions {\n return {\n options: options.options,\n height: options.height,\n layout: options.layout,\n };\n}\n\nexport default getOrdererPublicWidgetOptions;\n","import getOrdererPublicWidgetOptions from \"./orderer-util\";\n\nimport type {PerseusOrdererWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type OrdererDefaultWidgetOptions = Pick<\n PerseusOrdererWidgetOptions,\n \"correctOptions\" | \"otherOptions\" | \"height\" | \"layout\"\n>;\n\nconst defaultWidgetOptions: OrdererDefaultWidgetOptions = {\n correctOptions: [{content: \"$x$\"}] as any,\n otherOptions: [{content: \"$y$\"}] as any,\n height: \"normal\",\n layout: \"horizontal\",\n};\n\nconst ordererWidgetLogic: WidgetLogic = {\n name: \"orderer\",\n defaultWidgetOptions,\n getPublicWidgetOptions: getOrdererPublicWidgetOptions,\n};\n\nexport default ordererWidgetLogic;\n","import type {PerseusPassageWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type PassageDefaultWidgetOptions = Pick<\n PerseusPassageWidgetOptions,\n \"passageTitle\" | \"passageText\" | \"footnotes\" | \"showLineNumbers\"\n>;\n\nconst defaultWidgetOptions: PassageDefaultWidgetOptions = {\n passageTitle: \"\",\n passageText: \"\",\n footnotes: \"\",\n showLineNumbers: true,\n};\n\nconst passageWidgetLogic: WidgetLogic = {\n name: \"passage\",\n defaultWidgetOptions,\n};\n\nexport default passageWidgetLogic;\n","import type {PerseusPassageRefWidgetOptions} from \"../../data-schema\";\n\nexport const currentVersion = {major: 0, minor: 1};\n\nexport type PassageRefDefaultWidgetOptions = Pick<\n PerseusPassageRefWidgetOptions,\n \"passageNumber\" | \"referenceNumber\" | \"summaryText\"\n>;\n\nexport const defaultWidgetOptions: PassageRefDefaultWidgetOptions = {\n passageNumber: 1,\n referenceNumber: 1,\n summaryText: \"\",\n};\n","import {currentVersion, defaultWidgetOptions} from \"./passage-ref-upgrade\";\n\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type {PassageRefDefaultWidgetOptions} from \"./passage-ref-upgrade\";\n\nconst passageRefWidgetLogic: WidgetLogic = {\n name: \"passageRef\",\n version: currentVersion,\n defaultWidgetOptions: defaultWidgetOptions,\n defaultAlignment: \"inline\",\n};\n\nexport default passageRefWidgetLogic;\n","import type {PerseusPassageRefTargetWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type PassageRefTargetDefaultWidgetOptions = Pick<\n PerseusPassageRefTargetWidgetOptions,\n \"content\"\n>;\n\nconst defaultWidgetOptions: PassageRefTargetDefaultWidgetOptions = {\n content: \"\",\n};\n\nconst passageRefTargetWidgetLogic: WidgetLogic = {\n name: \"passageRefTarget\",\n defaultWidgetOptions,\n defaultAlignment: \"inline\",\n};\n\nexport default passageRefTargetWidgetLogic;\n","import type {PerseusPhetSimulationWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type PhetSimulationDefaultWidgetOptions = Pick<\n PerseusPhetSimulationWidgetOptions,\n \"url\" | \"description\"\n>;\n\nconst defaultWidgetOptions: PhetSimulationDefaultWidgetOptions = {\n url: \"\",\n description: \"\",\n};\n\nconst phetSimulationWidgetLogic: WidgetLogic = {\n name: \"phet-simulation\",\n defaultWidgetOptions,\n};\n\nexport default phetSimulationWidgetLogic;\n","import type {PerseusPlotterWidgetOptions} from \"@khanacademy/perseus-core\";\n\n/**\n * For details on the individual options, see the\n * PerseusPlotterWidgetOptions type\n */\ntype PlotterPublicWidgetOptions = Omit<PerseusPlotterWidgetOptions, \"correct\">;\n\n/**\n * Given a PerseusPlotterWidgetOptions object, return a new object with only\n * the public options that should be exposed to the client.\n */\nfunction getPlotterPublicWidgetOptions(\n options: PerseusPlotterWidgetOptions,\n): PlotterPublicWidgetOptions {\n const {correct: _, ...publicOptions} = options;\n return publicOptions;\n}\n\nexport default getPlotterPublicWidgetOptions;\n","import getPlotterPublicWidgetOptions from \"./plotter-util\";\n\nimport type {PerseusPlotterWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type PlotterDefaultWidgetOptions = Pick<\n PerseusPlotterWidgetOptions,\n | \"scaleY\"\n | \"maxY\"\n | \"snapsPerLine\"\n | \"correct\"\n | \"starting\"\n | \"type\"\n | \"labels\"\n | \"categories\"\n | \"picSize\"\n | \"picBoxHeight\"\n | \"plotDimensions\"\n | \"labelInterval\"\n | \"picUrl\"\n>;\n\nconst defaultWidgetOptions: PlotterDefaultWidgetOptions = {\n scaleY: 1,\n maxY: 10,\n snapsPerLine: 2,\n correct: [1],\n starting: [1],\n\n type: \"bar\",\n labels: [\"\", \"\"],\n categories: [\"\"],\n\n picSize: 30,\n picBoxHeight: 36,\n plotDimensions: [275, 200],\n labelInterval: 1,\n\n picUrl: null,\n};\n\nconst plotterWidgetLogic: WidgetLogic = {\n name: \"plotter\",\n defaultWidgetOptions,\n getPublicWidgetOptions: getPlotterPublicWidgetOptions,\n};\n\nexport default plotterWidgetLogic;\n","import type {PerseusPythonProgramWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type PythonProgramDefaultWidgetOptions = Pick<\n PerseusPythonProgramWidgetOptions,\n \"programID\" | \"height\"\n>;\n\nconst defaultWidgetOptions: PythonProgramDefaultWidgetOptions = {\n programID: \"\",\n height: 400,\n};\n\nconst pythonProgramWidgetLogic: WidgetLogic = {\n name: \"python-program\",\n defaultWidgetOptions,\n};\n\nexport default pythonProgramWidgetLogic;\n","import type {PerseusRadioWidgetOptions} from \"../../data-schema\";\n\nexport const currentVersion = {major: 1, minor: 0};\n\nexport const widgetOptionsUpgrades = {\n \"1\": (v0props: any): PerseusRadioWidgetOptions => {\n const {noneOfTheAbove, ...rest} = v0props;\n\n if (noneOfTheAbove) {\n throw new Error(\n \"radio widget v0 no longer supports auto noneOfTheAbove\",\n );\n }\n\n return {\n ...rest,\n hasNoneOfTheAbove: false,\n };\n },\n} as const;\n\nexport type RadioDefaultWidgetOptions = Pick<\n PerseusRadioWidgetOptions,\n | \"choices\"\n | \"displayCount\"\n | \"randomize\"\n | \"hasNoneOfTheAbove\"\n | \"multipleSelect\"\n | \"countChoices\"\n | \"deselectEnabled\"\n>;\n\nexport const defaultWidgetOptions: RadioDefaultWidgetOptions = {\n choices: [{}, {}, {}, {}] as any,\n displayCount: null,\n randomize: false,\n hasNoneOfTheAbove: false,\n multipleSelect: false,\n countChoices: false,\n deselectEnabled: false,\n};\n","import type {\n PerseusRadioChoice,\n PerseusRadioWidgetOptions,\n} from \"@khanacademy/perseus-core\";\n\n/**\n * For details on the individual options, see the\n * PerseusRadioWidgetOptions type\n */\ntype RadioPublicWidgetOptions = {\n choices: ReadonlyArray<RadioChoicePublicData>;\n hasNoneOfTheAbove?: PerseusRadioWidgetOptions[\"hasNoneOfTheAbove\"];\n countChoices?: PerseusRadioWidgetOptions[\"countChoices\"];\n randomize?: PerseusRadioWidgetOptions[\"randomize\"];\n multipleSelect?: PerseusRadioWidgetOptions[\"multipleSelect\"];\n deselectEnabled?: PerseusRadioWidgetOptions[\"deselectEnabled\"];\n onePerLine?: PerseusRadioWidgetOptions[\"onePerLine\"];\n displayCount?: PerseusRadioWidgetOptions[\"displayCount\"];\n noneOfTheAbove?: PerseusRadioWidgetOptions[\"noneOfTheAbove\"];\n};\n\n/**\n * Only the options from each Radio choice that should be exposed to the client.\n */\ntype RadioChoicePublicData = Pick<\n PerseusRadioChoice,\n \"content\" | \"isNoneOfTheAbove\" | \"widgets\"\n>;\n\n/**\n * Given a PerseusRadioChoice object, return a new object with only the public\n * data that should be included in the Radio public widget options.\n */\nfunction getRadioChoicePublicData(\n choice: PerseusRadioChoice,\n): RadioChoicePublicData {\n const {content, isNoneOfTheAbove, widgets} = choice;\n return {\n content,\n isNoneOfTheAbove,\n widgets,\n };\n}\n\n/**\n * Given a PerseusRadioWidgetOptions object, return a new object with only\n * the public options that should be exposed to the client.\n */\nfunction getRadioPublicWidgetOptions(\n options: PerseusRadioWidgetOptions,\n): RadioPublicWidgetOptions {\n return {\n ...options,\n choices: options.choices.map(getRadioChoicePublicData),\n };\n}\n\nexport default getRadioPublicWidgetOptions;\n","import {\n currentVersion,\n defaultWidgetOptions,\n widgetOptionsUpgrades,\n} from \"./radio-upgrade\";\nimport getRadioPublicWidgetOptions from \"./radio-util\";\n\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type {RadioDefaultWidgetOptions} from \"./radio-upgrade\";\n\nconst radioWidgetLogic: WidgetLogic = {\n name: \"radio\",\n version: currentVersion,\n widgetOptionsUpgrades: widgetOptionsUpgrades,\n defaultWidgetOptions: defaultWidgetOptions,\n getPublicWidgetOptions: getRadioPublicWidgetOptions,\n};\n\nexport default radioWidgetLogic;\n","import {shuffle} from \"@khanacademy/perseus-core\";\n\nimport type {PerseusSorterWidgetOptions} from \"@khanacademy/perseus-core\";\n\n/**\n * For details on the individual options, see the\n * PerseusSorterWidgetOptions type\n */\ntype SorterPublicWidgetOptions = {\n correct: PerseusSorterWidgetOptions[\"correct\"];\n padding: PerseusSorterWidgetOptions[\"padding\"];\n layout: PerseusSorterWidgetOptions[\"layout\"];\n isCorrectShuffled: boolean;\n};\n\n/**\n * Given a PerseusSorterWidgetOptions object, return a new object with only\n * the public options that should be exposed to the client.\n */\nfunction getSorterPublicWidgetOptions(\n options: PerseusSorterWidgetOptions,\n): SorterPublicWidgetOptions {\n const shuffledCorrect = shuffle(\n options.correct,\n Math.random,\n /* ensurePermuted */ true,\n );\n\n return {\n ...options,\n // Note(Tamara): This does not provide correct answer information any longer.\n // To maintain compatibility with the original widget options, we are\n // keeping the key the same. Represents initial state of the cards here.\n correct: shuffledCorrect,\n // Note(Tamara): This new key is only added here with \"true\". There isn't\n // a place where it is set to false. It indicates that the correct field\n // has been shuffled and no longer contains correct answer info.\n isCorrectShuffled: true,\n };\n}\n\nexport default getSorterPublicWidgetOptions;\n","import getSorterPublicWidgetOptions from \"./sorter-util\";\n\nimport type {PerseusSorterWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type SorterDefaultWidgetOptions = Pick<\n PerseusSorterWidgetOptions,\n \"correct\" | \"layout\" | \"padding\"\n>;\n\nconst defaultWidgetOptions: SorterDefaultWidgetOptions = {\n correct: [\"$x$\", \"$y$\", \"$z$\"],\n layout: \"horizontal\",\n padding: true,\n};\n\nconst sorterWidgetLogic: WidgetLogic = {\n name: \"sorter\",\n defaultWidgetOptions,\n getPublicWidgetOptions: getSorterPublicWidgetOptions,\n};\n\nexport default sorterWidgetLogic;\n","import type {PerseusTableWidgetOptions} from \"@khanacademy/perseus-core\";\n\ntype TablePublicWidgetOptions = Pick<\n PerseusTableWidgetOptions,\n \"headers\" | \"rows\" | \"columns\"\n>;\n\nexport default function getTablePublicWidgetOptions(\n options: PerseusTableWidgetOptions,\n): TablePublicWidgetOptions {\n const {answers: _, ...publicOptions} = options;\n return publicOptions;\n}\n","import getTablePublicWidgetOptions from \"./table-util\";\n\nimport type {PerseusTableWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type TableDefaultWidgetOptions = Pick<\n PerseusTableWidgetOptions,\n \"headers\" | \"rows\" | \"columns\" | \"answers\"\n>;\n\nconst defaultRows = 4;\nconst defaultColumns = 1;\n\n// initialize a 2D array\n// (defaultRows x defaultColumns) of empty strings\nconst answers = new Array(defaultRows)\n .fill(0)\n .map(() => new Array(defaultColumns).fill(\"\"));\n\nconst defaultWidgetOptions: TableDefaultWidgetOptions = {\n headers: [\"\"],\n rows: defaultRows,\n columns: defaultColumns,\n answers: answers,\n};\n\nconst tableWidgetLogic: WidgetLogic = {\n name: \"table\",\n defaultWidgetOptions,\n getPublicWidgetOptions: getTablePublicWidgetOptions,\n};\n\nexport default tableWidgetLogic;\n","import type {PerseusVideoWidgetOptions} from \"../../data-schema\";\nimport type {WidgetLogic} from \"../logic-export.types\";\n\nexport type VideoDefaultWidgetOptions = Pick<\n PerseusVideoWidgetOptions,\n \"location\"\n>;\n\nconst defaultWidgetOptions: VideoDefaultWidgetOptions = {\n location: \"\",\n};\n\nconst videoWidgetLogic: WidgetLogic = {\n name: \"video\",\n defaultWidgetOptions,\n supportedAlignments: [\"block\", \"float-left\", \"float-right\", \"full-width\"],\n defaultAlignment: \"block\",\n};\n\nexport default videoWidgetLogic;\n","import categorizerWidgetLogic from \"./categorizer\";\nimport csProgramWidgetLogic from \"./cs-program\";\nimport definitionWidgetLogic from \"./definition\";\nimport dropdownWidgetLogic from \"./dropdown\";\nimport explanationWidgetLogic from \"./explanation\";\nimport expressionWidgetLogic from \"./expression\";\nimport gradedGroupWidgetLogic from \"./graded-group\";\nimport gradedGroupSetWidgetLogic from \"./graded-group-set\";\nimport grapherWidgetLogic from \"./grapher\";\nimport groupWidgetLogic from \"./group\";\nimport iframeWidgetLogic from \"./iframe\";\nimport imageWidgetLogic from \"./image\";\nimport inputNumberWidgetLogic from \"./input-number\";\nimport interactionWidgetLogic from \"./interaction\";\nimport interactiveGraphWidgetLogic from \"./interactive-graph\";\nimport labelImageWidgetLogic from \"./label-image\";\nimport matcherWidgetLogic from \"./matcher\";\nimport matrixWidgetLogic from \"./matrix\";\nimport measurerWidgetLogic from \"./measurer\";\nimport numberLineWidgetLogic from \"./number-line\";\nimport numericInputWidgetLogic from \"./numeric-input\";\nimport ordererWidgetLogic from \"./orderer\";\nimport passageWidgetLogic from \"./passage\";\nimport passageRefWidgetLogic from \"./passage-ref\";\nimport passageRefTargetWidgetLogic from \"./passage-ref-target\";\nimport phetSimulationWidgetLogic from \"./phet-simulation\";\nimport plotterWidgetLogic from \"./plotter\";\nimport pythonProgramWidgetLogic from \"./python-program\";\nimport radioWidgetLogic from \"./radio\";\nimport sorterWidgetLogic from \"./sorter\";\nimport tableWidgetLogic from \"./table\";\nimport videoWidgetLogic from \"./video\";\n\nimport type {\n PublicWidgetOptionsFunction,\n WidgetLogic,\n} from \"./logic-export.types\";\nimport type {Alignment} from \"../types\";\n\nconst widgets = {};\n\nfunction registerWidget(type: string, logic: WidgetLogic) {\n widgets[type] = logic;\n}\n\nexport function isWidgetRegistered(type: string) {\n const widgetLogic = widgets[type];\n return !!widgetLogic;\n}\n\nexport function getCurrentVersion(type: string) {\n const widgetLogic = widgets[type];\n return widgetLogic?.version || {major: 0, minor: 0};\n}\n\n// TODO(LEMS-2870): getPublicWidgetOptionsFunction/PublicWidgetOptionsFunction\n// need better types\nexport const getPublicWidgetOptionsFunction = (\n name: string,\n): PublicWidgetOptionsFunction => {\n return widgets[name]?.getPublicWidgetOptions ?? ((i: any) => i);\n};\n\nexport function getWidgetOptionsUpgrades(type: string) {\n const widgetLogic = widgets[type];\n return widgetLogic?.widgetOptionsUpgrades || {};\n}\n\nexport function getDefaultWidgetOptions(type: string) {\n const widgetLogic = widgets[type];\n return widgetLogic?.defaultWidgetOptions || {};\n}\n\n/**\n * Handling for the optional alignments for widgets\n * See widget-container.jsx for details on how alignments are implemented.\n */\n\n/**\n * Returns the list of supported alignments for the given (string) widget\n * type. This is used primarily at editing time to display the choices\n * for the user.\n *\n * Supported alignments are given as an array of strings in the exports of\n * a widget's module.\n */\nexport const getSupportedAlignments = (\n type: string,\n): ReadonlyArray<Alignment> => {\n const widgetLogic = widgets[type];\n if (!widgetLogic?.supportedAlignments?.[0]) {\n // default alignments\n return [\"default\"];\n }\n return widgetLogic?.supportedAlignments;\n};\n\n/**\n * For the given (string) widget type, determine the default alignment for\n * the widget. This is used at rendering time to go from \"default\" alignment\n * to the actual alignment displayed on the screen.\n *\n * The default alignment is given either as a string (called\n * `defaultAlignment`) or a function (called `getDefaultAlignment`) on\n * the exports of a widget's module.\n */\nexport const getDefaultAlignment = (type: string): Alignment => {\n const widgetLogic = widgets[type];\n if (!widgetLogic?.defaultAlignment) {\n return \"block\";\n }\n return widgetLogic.defaultAlignment;\n};\n\nregisterWidget(\"categorizer\", categorizerWidgetLogic);\nregisterWidget(\"cs-program\", csProgramWidgetLogic);\nregisterWidget(\"definition\", definitionWidgetLogic);\nregisterWidget(\"dropdown\", dropdownWidgetLogic);\nregisterWidget(\"explanation\", explanationWidgetLogic);\nregisterWidget(\"expression\", expressionWidgetLogic);\nregisterWidget(\"graded-group\", gradedGroupWidgetLogic);\nregisterWidget(\"graded-group-set\", gradedGroupSetWidgetLogic);\nregisterWidget(\"grapher\", grapherWidgetLogic);\nregisterWidget(\"group\", groupWidgetLogic);\nregisterWidget(\"iframe\", iframeWidgetLogic);\nregisterWidget(\"image\", imageWidgetLogic);\nregisterWidget(\"input-number\", inputNumberWidgetLogic);\nregisterWidget(\"interaction\", interactionWidgetLogic);\nregisterWidget(\"interactive-graph\", interactiveGraphWidgetLogic);\nregisterWidget(\"label-image\", labelImageWidgetLogic);\nregisterWidget(\"matcher\", matcherWidgetLogic);\nregisterWidget(\"matrix\", matrixWidgetLogic);\nregisterWidget(\"measurer\", measurerWidgetLogic);\nregisterWidget(\"number-line\", numberLineWidgetLogic);\nregisterWidget(\"numeric-input\", numericInputWidgetLogic);\nregisterWidget(\"orderer\", ordererWidgetLogic);\nregisterWidget(\"passage\", passageWidgetLogic);\nregisterWidget(\"passage-ref\", passageRefWidgetLogic);\nregisterWidget(\"passage-ref-target\", passageRefTargetWidgetLogic);\nregisterWidget(\"phet-simulation\", phetSimulationWidgetLogic);\nregisterWidget(\"plotter\", plotterWidgetLogic);\nregisterWidget(\"python-program\", pythonProgramWidgetLogic);\nregisterWidget(\"radio\", radioWidgetLogic);\nregisterWidget(\"sorter\", sorterWidgetLogic);\nregisterWidget(\"table\", tableWidgetLogic);\nregisterWidget(\"video\", videoWidgetLogic);\n","import _ from \"underscore\";\n\nimport {Errors} from \"../error/errors\";\nimport {PerseusError} from \"../error/perseus-error\";\nimport {mapObject} from \"../utils/objective_\";\n\nimport {\n getCurrentVersion,\n getDefaultWidgetOptions,\n getSupportedAlignments,\n getWidgetOptionsUpgrades,\n isWidgetRegistered,\n} from \"./core-widget-registry\";\n\nimport type {PerseusWidget, PerseusWidgetsMap} from \"../data-schema\";\n\nconst DEFAULT_STATIC = false;\n\nexport const upgradeWidgetInfoToLatestVersion = (\n oldWidgetInfo: PerseusWidget,\n): PerseusWidget => {\n const type = oldWidgetInfo.type;\n // NOTE(jeremy): This looks like it could be replaced by fixing types so\n // that `type` is non-optional. But we're seeing this in Sentry today so I\n // suspect we have legacy data (potentially unpublished) and we should\n // figure that out before depending solely on types.\n if (!_.isString(type)) {\n throw new PerseusError(\n \"widget type must be a string, but was: \" + type,\n Errors.Internal,\n );\n }\n\n if (!isWidgetRegistered(type)) {\n // If we have a widget that isn't registered, we can't upgrade it\n // TODO(aria): Figure out what the best thing to do here would be\n return oldWidgetInfo;\n }\n\n // Unversioned widgets (pre-July 2014) are all implicitly 0.0\n const initialVersion = oldWidgetInfo.version || {major: 0, minor: 0};\n const latestVersion = getCurrentVersion(type);\n\n // If the widget version is later than what we understand (major\n // version is higher than latest, or major versions are equal and minor\n // version is higher than latest), don't perform any upgrades.\n if (\n initialVersion.major > latestVersion.major ||\n (initialVersion.major === latestVersion.major &&\n initialVersion.minor > latestVersion.minor)\n ) {\n return oldWidgetInfo;\n }\n\n // We do a clone here so that it's safe to mutate the input parameter\n // in propUpgrades functions (which I will probably accidentally do at\n // some point, and we would like to not break when that happens).\n let newEditorOptions = _.clone(oldWidgetInfo.options) || {};\n\n const upgradePropsMap = getWidgetOptionsUpgrades(type);\n\n // Empty props usually mean a newly created widget by the editor,\n // and are always considerered up-to-date.\n // Mostly, we'd rather not run upgrade functions on props that are\n // not complete.\n if (_.keys(newEditorOptions).length !== 0) {\n // We loop through all the versions after the current version of\n // the loaded widget, up to and including the latest version of the\n // loaded widget, and run the upgrade function to bring our loaded\n // widget's props up to that version.\n // There is a little subtlety here in that we call\n // upgradePropsMap[1] to upgrade *to* version 1,\n // (not from version 1).\n for (\n let nextVersion = initialVersion.major + 1;\n nextVersion <= latestVersion.major;\n nextVersion++\n ) {\n if (upgradePropsMap[String(nextVersion)]) {\n newEditorOptions =\n upgradePropsMap[String(nextVersion)](newEditorOptions);\n } else {\n throw new PerseusError(\n \"No upgrade found for widget. Cannot render.\",\n Errors.Internal,\n {\n metadata: {\n type,\n fromMajorVersion: nextVersion - 1,\n toMajorVersion: nextVersion,\n oldWidgetInfo: JSON.stringify(oldWidgetInfo),\n },\n },\n );\n }\n }\n }\n\n // Minor version upgrades (eg. new optional props) don't have\n // transform functions. Instead, we fill in the new props with their\n // defaults.\n const defaultOptions = getDefaultWidgetOptions(type);\n newEditorOptions = {\n ...defaultOptions,\n ...newEditorOptions,\n };\n\n let alignment = oldWidgetInfo.alignment;\n\n // Widgets that support multiple alignments will \"lock in\" the\n // alignment to the alignment that would be listed first in the\n // select box. If the widget only supports one alignment, the\n // alignment value will likely just end up as \"default\".\n if (alignment == null || alignment === \"default\") {\n alignment = getSupportedAlignments(type)?.[0];\n if (!alignment) {\n throw new PerseusError(\n \"No default alignment found when upgrading widget\",\n Errors.Internal,\n {metadata: {widgetType: type}},\n );\n }\n }\n\n let widgetStatic = oldWidgetInfo.static;\n\n if (widgetStatic == null) {\n widgetStatic = DEFAULT_STATIC;\n }\n\n return {\n ...oldWidgetInfo,\n // maintain other info, like type\n // After upgrading we guarantee that the version is up-to-date\n version: latestVersion,\n // Default graded to true (so null/undefined becomes true):\n graded: oldWidgetInfo.graded != null ? oldWidgetInfo.graded : true,\n alignment: alignment,\n static: widgetStatic,\n options: newEditorOptions,\n } as any;\n};\n\nexport function getUpgradedWidgetOptions(\n oldWidgetOptions: PerseusWidgetsMap,\n): PerseusWidgetsMap {\n return mapObject(oldWidgetOptions, (widgetInfo, widgetId) => {\n if (!widgetInfo.type || !widgetInfo.alignment) {\n const newValues: Record<string, any> = {};\n\n if (!widgetInfo.type) {\n // TODO: why does widget have no type?\n // We don't want to derive type from widget ID\n // see: LEMS-1845\n newValues.type = widgetId.split(\" \")[0];\n }\n\n if (!widgetInfo.alignment) {\n newValues.alignment = \"default\";\n }\n\n widgetInfo = {...widgetInfo, ...newValues};\n }\n\n return upgradeWidgetInfoToLatestVersion(widgetInfo) as any;\n });\n}\n","import _ from \"underscore\";\n\nimport {getPublicWidgetOptionsFunction} from \"../widgets/core-widget-registry\";\nimport {getUpgradedWidgetOptions} from \"../widgets/upgrade\";\n\nimport type {PerseusRenderer} from \"../data-schema\";\n\nexport default function splitPerseusItem(\n originalItem: PerseusRenderer,\n): PerseusRenderer {\n const item = _.clone(originalItem);\n const originalWidgets = item.widgets ?? {};\n\n const upgradedWidgets = getUpgradedWidgetOptions(originalWidgets);\n const splitWidgets = {};\n\n for (const [id, widget] of Object.entries(upgradedWidgets)) {\n const publicWidgetOptionsFun = getPublicWidgetOptionsFunction(\n widget.type,\n );\n\n splitWidgets[id] = {\n ...widget,\n options: publicWidgetOptionsFun(widget.options as any),\n };\n }\n\n return {\n ...item,\n widgets: splitWidgets,\n };\n}\n","/* Note(tamara): Brought over from the perseus package packages/perseus/src/util.ts file.\n May be useful to bring other perseus package utilities here. Contains utility functions\n and types used across multiple widgets for randomization and shuffling. */\n\nimport _ from \"underscore\";\n\ntype RNG = () => number;\n\nexport const seededRNG: (seed: number) => RNG = function (seed: number): RNG {\n let randomSeed = seed;\n\n return function () {\n // Robert Jenkins' 32 bit integer hash function.\n let seed = randomSeed;\n seed = (seed + 0x7ed55d16 + (seed << 12)) & 0xffffffff;\n seed = (seed ^ 0xc761c23c ^ (seed >>> 19)) & 0xffffffff;\n seed = (seed + 0x165667b1 + (seed << 5)) & 0xffffffff;\n seed = ((seed + 0xd3a2646c) ^ (seed << 9)) & 0xffffffff;\n seed = (seed + 0xfd7046c5 + (seed << 3)) & 0xffffffff;\n seed = (seed ^ 0xb55a4f09 ^ (seed >>> 16)) & 0xffffffff;\n return (randomSeed = seed & 0xfffffff) / 0x10000000;\n };\n};\n\n// Shuffle an array using a given random seed or function.\n// If `ensurePermuted` is true, the input and output are guaranteed to be\n// distinct permutations.\nexport function shuffle<T>(\n array: ReadonlyArray<T>,\n randomSeed: number | RNG,\n ensurePermuted = false,\n): ReadonlyArray<T> {\n // Always return a copy of the input array\n const shuffled = _.clone(array);\n\n // Handle edge cases (input array is empty or uniform)\n if (\n !shuffled.length ||\n _.all(shuffled, function (value) {\n return _.isEqual(value, shuffled[0]);\n })\n ) {\n return shuffled;\n }\n\n let random;\n if (typeof randomSeed === \"function\") {\n random = randomSeed;\n } else {\n random = seededRNG(randomSeed);\n }\n\n do {\n // Fischer-Yates shuffle\n for (let top = shuffled.length; top > 0; top--) {\n const newEnd = Math.floor(random() * top);\n const temp = shuffled[newEnd];\n\n // @ts-expect-error - TS2542 - Index signature in type 'readonly T[]' only permits reading.\n shuffled[newEnd] = shuffled[top - 1];\n // @ts-expect-error - TS2542 - Index signature in type 'readonly T[]' only permits reading.\n shuffled[top - 1] = temp;\n }\n } while (ensurePermuted && _.isEqual(array, shuffled));\n\n return shuffled;\n}\n\nexport const random: RNG = seededRNG(new Date().getTime() & 0xffffffff);\n"],"names":["getMatrixSize","matrix","matrixSize","_","each","matrixRow","row","rowWidth","matrixCol","col","toString","length","Math","max","getDecimalSeparator","locale","numberWithDecimalSeparator","match","Intl","NumberFormat","format","approximateEqual","x","y","abs","approximateDeepEqual","Array","isArray","i","all","v","k","addWidget","id","getWidgetRegex","getWidgetIdsFromContent","content","widgets","localWidgetRegex","exec","push","getWidgetIdsFromContentByType","type","widgetMap","rv","widgetIdsInContent","forEach","widgetId","widget","deepClone","obj","map","MOVABLES","PLOT","PARABOLA","SINUSOID","canonicalSineCoefficients","coeffs","amplitude","angularFrequency","phase","verticalOffset","period","PI","canonicalTangentCoefficients","PlotDefaults","areEqual","coeffs1","coeffs2","movable","getPropsForCoeffs","fn","partial","getFunctionForCoeffs","Linear","extend","url","defaultCoords","getCoefficients","coords","p1","p2","denom","num","m","b","getEquationString","toFixed","Quadratic","h","a","c","Sinusoid","d","sin","Tangent","tan","Exponential","defaultAsymptote","extraCoordConstraint","newCoord","oldCoord","asymptote","graph","coord","extraAsymptoteConstraint","isValid","oldY","wasBelow","bottomMost","min","snapStep","topMost","allowReflectOverAsymptote","log","exp","Logarithm","oldX","wasLeft","leftMost","rightMost","flip","inverseCoeffs","AbsoluteValue","horizontalOffset","functionTypeMapping","linear","quadratic","sinusoid","tangent","exponential","logarithm","absolute_value","allTypes","keys","functionForType","isRealJSONParse","jsonParse","randomPhrase","buildRandomPhrase","randomHintPhrase","randomString","buildRandomString","testingObject","JSON","stringify","answerArea","calculator","chi2Table","financialCalculatorMonthlyPayment","financialCalculatorTimeToPayOff","financialCalculatorTotalAmount","periodicTable","periodicTableWithKey","tTable","zTable","hints","floor","random","itemDataVersion","major","minor","question","images","expression1","alignment","graded","options","answerForms","considered","form","key","simplify","value","ariaLabel","buttonSets","functions","static","times","visibleLabel","version","testJSON","buildTestData","replace","parsedTestJSON","parsedTestItemData","data","assessmentItem","item","itemData","capitalize","arguments","undefined","randomLength","randomLetter","String","fromCharCode","toUpperCase","phrases","modifierStart","modifierEnd","modifierIndex","join","testObject","success","failure","detail","isFailure","result","isSuccess","results","combineFailureDetails","values","failureDetails","reduce","ErrorTrackingParseContext","constructor","path","expected","badValue","wrapInArray","forSubtree","formatPath","formatPathSegment","segment","validIdentifier","test","message","conjoin","items","allButLast","slice","last","parse","parser","any","rawValue","ctx","array","elementParser","elementResults","elem","Result","concat","boolean","constant","acceptedValue","enumeration","_len","acceptedValues","_key","index","indexOf","isObject","Object","getPrototypeOf","prototype","nullable","parseValue","number","object","schema","ret","mismatches","prop","propParser","entries","optional","pair","parseA","parseB","rawA","rawB","resultA","resultB","pipeParsers","p","ParserPipeline","then","nextParser","composeParsers","parserA","parserB","partialResult","record","parseKey","entryCtx","keyResult","valueResult","string","trio","parseC","resultC","union","parseBranch","UnionBuilder","or","newBranch","either","defaulted","fallback","parseImages","width","height","parseWidget","parseType","parseOptions","parseWidgetWithVersion","parseVersion","parseCategorizerWidget","categories","randomizeItems","highlightLint","linterContext","contentType","paths","stack","parseCSProgramWidget","programID","programType","settings","name","showEditor","showButtons","parseDefinitionWidget","togglePrompt","definition","parseDropdownWidget","placeholder","choices","correct","parseExplanationWidget","showPrompt","hidePrompt","explanation","rawVal","parseWidgetsMap","convert","f","parseLegacyButtonSet","parseLegacyButtonSets","versionedWidgetOptions","latestMajorVersion","parseLatest","VersionedWidgetOptionsParserBuilder","latest","raw","majorVersion","parseThisVersion","migrateToLatest","parseOtherVersions","parseThisVersionAndMigrateToLatest","versionParseResult","parseVersionedObject","withMigrationFrom","parseOldVersion","migrateToNextVersion","old","stringOrNumberOrNullOrUndefined","parsePossiblyInvalidAnswerForm","removeInvalidAnswerForms","possiblyInvalid","valid","answerForm","version1","parseExpressionWidgetV1","buttonsVisible","version0","parseExpressionWidgetV0","migrateV0ToV1","parseExpressionWidget","falseToNull","parseGradedGroupWidgetOptions","title","hasHint","hint","parsePerseusRenderer","widgetEnabled","immutableWidgets","parseGradedGroupWidget","parseGradedGroupSetWidget","gradedGroups","discriminatedUnionOn","discriminantKey","noMoreBranches","DiscriminatedUnionBuilder","withBranch","discriminantValue","parseNewVariant","parseNewBranch","discriminatedUnionBranch","parseVariant","parseOtherBranches","pairOfNumbers","pairOfPoints","parseGrapherWidget","availableTypes","backgroundImage","bottom","left","scale","box","editableSettings","gridStep","labels","markings","range","rulerLabel","rulerTicks","showProtractor","showRuler","showTooltips","step","parseGroupWidget","parseIframeWidget","allowFullScreen","allowTopNavigation","stringToNumber","parsedNumber","isNaN","emptyToZero","imageDimensionToNumber","dimensionOrUndefined","parsePerseusImageBackground","top","parseImageWidget","caption","alt","coordinates","booleanToString","parseInputNumberWidget","answerType","inexact","maxError","rightAlign","size","customKeypad","stringOrEmpty","parseFunctionElement","funcName","rangeMin","rangeMax","color","strokeDasharray","strokeWidth","parseLabelElement","label","coordX","coordY","parseLineElement","startX","startY","endX","endY","arrows","parseMovableLineElement","startSubscript","endSubscript","constraint","snap","constraintFn","constraintXMin","constraintXMax","constraintYMin","constraintYMax","parseMovablePointElement","varSubscript","parseParametricElement","parsePointElement","parseRectangleElement","parseInteractionWidget","tickStep","elements","ItemExtras","PerseusExpressionAnswerFormConsidered","lockedFigureColorNames","lockedFigureColors","blue","green","grayH","purple","pink","red","orange","lockedFigureFillStyles","none","white","translucent","solid","plotterPlotTypes","parsePerseusGraphTypeAngle","showAngles","allowReflexAngles","angleOffsetDeg","snapDegrees","startCoords","parsePerseusGraphTypeCircle","center","radius","parsePerseusGraphTypeLinear","parsePerseusGraphTypeLinearSystem","parsePerseusGraphTypeNone","parsePerseusGraphTypePoint","numPoints","parsePerseusGraphTypePolygon","numSides","showSides","snapTo","parsePerseusGraphTypeQuadratic","parsePerseusGraphTypeRay","parsePerseusGraphTypeSegment","numSegments","parsePerseusGraphTypeSinusoid","parsePerseusGraphType","parseLockedFigureColor","parseLockedFigureFillType","parseLockedLineStyle","parseLockedLabelType","text","parseLockedPointType","filled","parseLockedLineType","kind","points","lineStyle","showPoint1","showPoint2","parseLockedVectorType","parseLockedEllipseType","angle","fillStyle","strokeStyle","parseLockedPolygonType","showVertices","parseLockedFunctionDomain","Infinity","parseLockedFunctionType","equation","directionalAxis","domain","parseLockedFigure","parseInteractiveGraphWidget","lockedFigures","fullGraphLabel","fullGraphAriaDescription","parseLabelImageWidget","imageUrl","imageAlt","imageHeight","imageWidth","markers","answers","hideChoicesFromInstructions","multipleAnswers","parseMatcherWidget","right","orderMatters","padding","numberOrString","numeric","NaN","parseMatrixWidget","prefix","suffix","cursorPosition","matrixBoardSize","parseMeasurerWidget","image","rulerPixels","rulerLength","parseMoleculeRendererWidget","rotationAngle","smiles","emptyStringToNull","parseNumberLineWidget","labelRange","labelStyle","labelTicks","isTickCtrl","divisionRange","numDivisions","snapDivisions","correctRel","correctX","initialX","parseMathFormat","parseSimplify","parseNumericInputWidget","status","strict","labelText","coefficient","parseRenderer","largeToAuto","parseOrdererWidget","correctOptions","otherOptions","layout","parsePassageRefWidget","passageNumber","referenceNumber","summaryText","parsePassageWidget","footnotes","passageText","passageTitle","showLineNumbers","parsePhetSimulationWidget","description","parsePlotterWidget","maxY","scaleY","labelInterval","snapsPerLine","starting","picUrl","picSize","picBoxHeight","plotDimensions","parsePythonProgramWidget","parseRadioWidget","clue","isNoneOfTheAbove","hasNoneOfTheAbove","countChoices","randomize","multipleSelect","deselectEnabled","onePerLine","displayCount","noneOfTheAbove","parseSorterWidget","parseTableWidget","headers","rows","columns","parseVideoWidget","location","widgetsMap","entryResult","parseWidgetsMapEntry","_ref","idComponentsResult","parseWidgetIdComponents","split","n","parseAndAssign","widgetResult","parseDeprecatedWidget","parseStringToNonNegativeInt","metadata","parsePerseusArticle","parseHint","parsePerseusAnswerArea","toAnswerArea","parsePerseusItem","answer","json","Error","parseAndMigratePerseusItem","throwErrorIfCheatingDetected","migrateAndTypecheckPerseusItem","invalidObject","parseAndMigratePerseusArticle","migrateAndTypecheckPerseusArticle","addLibraryVersionToPerseusDebug","libraryName","libraryVersion","formattedVersion","globalThis","__perseus_debug__","existingVersionEntry","allVersions","console","warn","sort","libName","libVersion","Errors","freeze","Unknown","Internal","InvalidInput","NotAllowed","TransientService","Service","PerseusError","pluck","table","subKey","mapObject","lambda","getCategorizerPublicWidgetOptions","defaultWidgetOptions","categorizerWidgetLogic","getPublicWidgetOptions","getCSProgramPublicWidgetOptions","DEFAULT_HEIGHT","csProgramWidgetLogic","supportedAlignments","definitionWidgetLogic","defaultAlignment","getDropdownPublicWidgetOptions","choice","dropdownWidgetLogic","explanationWidgetLogic","currentVersion","widgetOptionsUpgrades","v0options","getExpressionPublicWidgetOptions","expressionWidgetLogic","gradedGroupWidgetLogic","gradedGroupSetWidgetLogic","getGrapherPublicWidgetOptions","publicOptions","grapherWidgetLogic","groupWidgetLogic","getIFramePublicWidgetOptions","iframeWidgetLogic","imageWidgetLogic","inputNumberWidgetLogic","interactionWidgetLogic","getInteractiveGraphPublicWidgetOptions","interactiveGraphWidgetLogic","getLabelImagePublicWidgetOptions","getLabelImageMarkerPublicData","marker","publicData","labelImageWidgetLogic","shuffleMatcher","props","rng","seededRNG","problemNum","shuffle","shuffleMatcherWithRandom","getMatcherPublicWidgetOptions","matcherWidgetLogic","getMatrixPublicWidgetOptions","matrixWidgetLogic","imageTop","imageLeft","rest","measurerWidgetLogic","getNumberLinePublicWidgetOptions","__","numberLineWidgetLogic","getNumericInputAnswerPublicData","getNumericInputPublicWidgetOptions","publicWidgetOptions","numericInputWidgetLogic","getOrdererPublicWidgetOptions","ordererWidgetLogic","passageWidgetLogic","passageRefWidgetLogic","passageRefTargetWidgetLogic","phetSimulationWidgetLogic","getPlotterPublicWidgetOptions","plotterWidgetLogic","pythonProgramWidgetLogic","v0props","getRadioChoicePublicData","getRadioPublicWidgetOptions","radioWidgetLogic","getSorterPublicWidgetOptions","shuffledCorrect","isCorrectShuffled","sorterWidgetLogic","getTablePublicWidgetOptions","defaultRows","defaultColumns","fill","tableWidgetLogic","videoWidgetLogic","registerWidget","logic","isWidgetRegistered","widgetLogic","getCurrentVersion","getPublicWidgetOptionsFunction","getWidgetOptionsUpgrades","getDefaultWidgetOptions","getSupportedAlignments","getDefaultAlignment","DEFAULT_STATIC","upgradeWidgetInfoToLatestVersion","oldWidgetInfo","isString","initialVersion","latestVersion","newEditorOptions","clone","upgradePropsMap","nextVersion","fromMajorVersion","toMajorVersion","defaultOptions","widgetType","widgetStatic","getUpgradedWidgetOptions","oldWidgetOptions","widgetInfo","newValues","splitPerseusItem","originalItem","originalWidgets","upgradedWidgets","splitWidgets","publicWidgetOptionsFun","seed","randomSeed","ensurePermuted","shuffled","isEqual","newEnd","temp","Date","getTime"],"mappings":";;;;;;;;;;;AAEA,SAASA,aAAaA,CAACC,MAA4C,EAAE;AACjE,EAAA,MAAMC,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;;AAEzB;AACA;EACAC,qBAAC,CAACF,MAAM,CAAC,CAACG,IAAI,CAAC,CAACC,SAAS,EAAEC,GAAG,KAAK;IAC/B,IAAIC,QAAQ,GAAG,CAAC,CAAA;IAChBJ,qBAAC,CAACE,SAAS,CAAC,CAACD,IAAI,CAAC,CAACI,SAAS,EAAEC,GAAG,KAAK;MAClC,IAAID,SAAS,IAAI,IAAI,IAAIA,SAAS,CAACE,QAAQ,EAAE,CAACC,MAAM,EAAE;QAClDJ,QAAQ,GAAGE,GAAG,GAAG,CAAC,CAAA;AACtB,OAAA;AACJ,KAAC,CAAC,CAAA;;AAEF;AACAP,IAAAA,UAAU,CAAC,CAAC,CAAC,GAAGU,IAAI,CAACC,GAAG,CAACX,UAAU,CAAC,CAAC,CAAC,EAAEK,QAAQ,CAAC,CAAA;;AAEjD;IACA,IAAIA,QAAQ,GAAG,CAAC,EAAE;AACdL,MAAAA,UAAU,CAAC,CAAC,CAAC,GAAGU,IAAI,CAACC,GAAG,CAACX,UAAU,CAAC,CAAC,CAAC,EAAEI,GAAG,GAAG,CAAC,CAAC,CAAA;AACpD,KAAA;AACJ,GAAC,CAAC,CAAA;AACF,EAAA,OAAOJ,UAAU,CAAA;AACrB;;ACxBA;AACA;AACA;AACMY,MAAAA,mBAAmB,GAAIC,MAAc,IAAa;AACpD,EAAA,QAAQA,MAAM;AACV;AACA;AACA;AACA;AACA;AACA;AACA,IAAA,KAAK,IAAI;AACL,MAAA,OAAO,GAAG,CAAA;AAEd,IAAA;MACI,MAAMC,0BAA0B,GAAG,GAAG,CAAA;AACtC;AACA;AACA,MAAA,MAAMC,KAAK,GAAG,IAAIC,IAAI,CAACC,YAAY,CAACJ,MAAM,CAAC,CACtCK,MAAM,CAACJ,0BAA0B,CAAA;AAClC;AACA;AACA;AACA;OACCC,KAAK,CAAC,+BAA+B,CAAC,CAAA;AAC3C,MAAA,OAAOA,KAAK,GAAG,CAAC,CAAC,IAAI,GAAG,CAAA;AAChC,GAAA;AACJ;;ACzBA;AACA;AACA;AACO,SAASI,gBAAgBA,CAAIC,CAAI,EAAEC,CAAI,EAAW;EACrD,IAAI,OAAOD,CAAC,KAAK,QAAQ,IAAI,OAAOC,CAAC,KAAK,QAAQ,EAAE;IAChD,OAAOX,IAAI,CAACY,GAAG,CAACF,CAAC,GAAGC,CAAC,CAAC,GAAG,IAAI,CAAA;AACjC,GAAA;EACA,OAAOD,CAAC,KAAKC,CAAC,CAAA;AAClB,CAAA;;AAEA;AACA;AACA;AACA;AACO,SAASE,oBAAoBA,CAAIH,CAAI,EAAEC,CAAI,EAAW;AACzD,EAAA,IAAIG,KAAK,CAACC,OAAO,CAACL,CAAC,CAAC,IAAII,KAAK,CAACC,OAAO,CAACJ,CAAC,CAAC,EAAE;AACtC,IAAA,IAAID,CAAC,CAACX,MAAM,KAAKY,CAAC,CAACZ,MAAM,EAAE;AACvB,MAAA,OAAO,KAAK,CAAA;AAChB,KAAA;AACA,IAAA,KAAK,IAAIiB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGN,CAAC,CAACX,MAAM,EAAEiB,CAAC,EAAE,EAAE;AAC/B,MAAA,IAAI,CAACH,oBAAoB,CAACH,CAAC,CAACM,CAAC,CAAC,EAAEL,CAAC,CAACK,CAAC,CAAC,CAAC,EAAE;AACnC,QAAA,OAAO,KAAK,CAAA;AAChB,OAAA;AACJ,KAAA;AACA,IAAA,OAAO,IAAI,CAAA;AACf,GAAA;AACA,EAAA,IAAIF,KAAK,CAACC,OAAO,CAACL,CAAC,CAAC,IAAII,KAAK,CAACC,OAAO,CAACJ,CAAC,CAAC,EAAE;AACtC,IAAA,OAAO,KAAK,CAAA;AAChB,GAAA;EACA,IAAI,OAAOD,CAAC,KAAK,UAAU,IAAI,OAAOC,CAAC,KAAK,UAAU,EAAE;AACpD,IAAA,OAAOF,gBAAgB,CAACC,CAAC,EAAEC,CAAC,CAAC,CAAA;AACjC,GAAA;EACA,IAAI,OAAOD,CAAC,KAAK,UAAU,IAAI,OAAOC,CAAC,KAAK,UAAU,EAAE;AACpD,IAAA,OAAO,KAAK,CAAA;AAChB,GAAA;AACA,EAAA,IAAI,OAAOD,CAAC,KAAK,QAAQ,IAAI,OAAOC,CAAC,KAAK,QAAQ,IAAI,CAAC,CAACD,CAAC,IAAI,CAAC,CAACC,CAAC,EAAE;AAC9D,IAAA,OACID,CAAC,KAAKC,CAAC,IACNpB,qBAAC,CAAC0B,GAAG,CAACP,CAAC,EAAE,UAAUQ,CAAC,EAAEC,CAAC,EAAE;AACtB;MACA,OAAON,oBAAoB,CAACF,CAAC,CAACQ,CAAC,CAAC,EAAED,CAAC,CAAC,CAAA;AACxC,KAAC,CAAC,IACE3B,qBAAC,CAAC0B,GAAG,CAACN,CAAC,EAAE,UAAUO,CAAC,EAAEC,CAAC,EAAE;AACrB;MACA,OAAON,oBAAoB,CAACH,CAAC,CAACS,CAAC,CAAC,EAAED,CAAC,CAAC,CAAA;AACxC,KAAC,CAAE,CAAA;AAEf,GAAA;AACA,EAAA,IAAK,OAAOR,CAAC,KAAK,QAAQ,IAAI,CAAC,CAACA,CAAC,IAAM,OAAOC,CAAC,KAAK,QAAQ,IAAI,CAAC,CAACA,CAAE,EAAE;AAClE,IAAA,OAAO,KAAK,CAAA;AAChB,GAAA;AACA,EAAA,OAAOF,gBAAgB,CAACC,CAAC,EAAEC,CAAC,CAAC,CAAA;AACjC;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASS,SAASA,CAACC,EAAU,EAAU;EAC1C,OAAO,CAAA,IAAA,EAAOA,EAAE,CAAI,EAAA,CAAA,CAAA;AACxB,CAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,cAAcA,GAAG;AAC7B,EAAA,OAAO,6BAA6B,CAAA;AACxC,CAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,uBAAuBA,CACnCC,OAAe,EACM;EACrB,MAAMC,OAAsB,GAAG,EAAE,CAAA;AACjC,EAAA,MAAMC,gBAAgB,GAAGJ,cAAc,EAAE,CAAA;AAEzC,EAAA,IAAIjB,KAAK,GAAGqB,gBAAgB,CAACC,IAAI,CAACH,OAAO,CAAC,CAAA;EAE1C,OAAOnB,KAAK,KAAK,IAAI,EAAE;AACnBoB,IAAAA,OAAO,CAACG,IAAI,CAACvB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AACtBA,IAAAA,KAAK,GAAGqB,gBAAgB,CAACC,IAAI,CAACH,OAAO,CAAC,CAAA;AAC1C,GAAA;AAEA,EAAA,OAAOC,OAAO,CAAA;AAClB,CAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASI,6BAA6BA,CACzCC,IAAY,EACZN,OAAe,EACfO,SAA4B,EACP;EACrB,MAAMC,EAAiB,GAAG,EAAE,CAAA;AAC5B,EAAA,MAAMC,kBAAkB,GAAGV,uBAAuB,CAACC,OAAO,CAAC,CAAA;AAC3DS,EAAAA,kBAAkB,CAACC,OAAO,CAAEC,QAAQ,IAAK;AACrC,IAAA,MAAMC,MAAM,GAAGL,SAAS,CAACI,QAAQ,CAAC,CAAA;AAClC,IAAA,IAAIC,MAAM,EAAEN,IAAI,KAAKA,IAAI,EAAE;AACvBE,MAAAA,EAAE,CAACJ,IAAI,CAACO,QAAQ,CAAC,CAAA;AACrB,KAAA;AACJ,GAAC,CAAC,CAAA;AACF,EAAA,OAAOH,EAAE,CAAA;AACb;;ACzEA;AACA;;AASA,SAASK,SAASA,CAAsBC,GAAM,EAAK;AAC/C,EAAA,IAAIxB,KAAK,CAACC,OAAO,CAACuB,GAAG,CAAC,EAAE;AACpB,IAAA,OAAOA,GAAG,CAACC,GAAG,CAACF,SAAS,CAAC,CAAA;AAC7B,GAAA;AACA,EAAA,OAAOC,GAAG,CAAA;AACd;;ACCO,MAAME,QAAQ,GAAG;AACpBC,EAAAA,IAAI,EAAE,MAAM;AACZC,EAAAA,QAAQ,EAAE,UAAU;AACpBC,EAAAA,QAAQ,EAAE,UAAA;AACd,CAAC,CAAA;;AAED;AACA;AACA,SAASC,yBAAyBA,CAACC,MAAW,EAAE;AAC5C;AACA;AACA;AACA,EAAA,IAAIC,SAAS,GAAGD,MAAM,CAAC,CAAC,CAAC,CAAA;AACzB,EAAA,IAAIE,gBAAgB,GAAGF,MAAM,CAAC,CAAC,CAAC,CAAA;AAChC,EAAA,IAAIG,KAAK,GAAGH,MAAM,CAAC,CAAC,CAAC,CAAA;AACrB,EAAA,MAAMI,cAAc,GAAGJ,MAAM,CAAC,CAAC,CAAC,CAAA;;AAEhC;EACA,IAAIC,SAAS,GAAG,CAAC,EAAE;IACfA,SAAS,IAAI,CAAC,CAAC,CAAA;IACfC,gBAAgB,IAAI,CAAC,CAAC,CAAA;IACtBC,KAAK,IAAI,CAAC,CAAC,CAAA;AACf,GAAA;AAEA,EAAA,MAAME,MAAM,GAAG,CAAC,GAAGlD,IAAI,CAACmD,EAAE,CAAA;AAC1B;EACA,IAAIJ,gBAAgB,GAAG,CAAC,EAAE;IACtBA,gBAAgB,IAAI,CAAC,CAAC,CAAA;IACtBC,KAAK,IAAI,CAAC,CAAC,CAAA;IACXA,KAAK,IAAIE,MAAM,GAAG,CAAC,CAAA;AACvB,GAAA;;AAEA;EACA,OAAOF,KAAK,GAAG,CAAC,EAAE;AACdA,IAAAA,KAAK,IAAIE,MAAM,CAAA;AACnB,GAAA;EACA,OAAOF,KAAK,GAAG,CAAC,EAAE;AACdA,IAAAA,KAAK,IAAIE,MAAM,CAAA;AACnB,GAAA;EAEA,OAAO,CAACJ,SAAS,EAAEC,gBAAgB,EAAEC,KAAK,EAAEC,cAAc,CAAC,CAAA;AAC/D,CAAA;AAEA,SAASG,4BAA4BA,CAACP,MAAW,EAAE;AAC/C;AACA;AACA;AACA,EAAA,IAAIC,SAAS,GAAGD,MAAM,CAAC,CAAC,CAAC,CAAA;AACzB,EAAA,IAAIE,gBAAgB,GAAGF,MAAM,CAAC,CAAC,CAAC,CAAA;AAChC,EAAA,IAAIG,KAAK,GAAGH,MAAM,CAAC,CAAC,CAAC,CAAA;AACrB,EAAA,MAAMI,cAAc,GAAGJ,MAAM,CAAC,CAAC,CAAC,CAAA;;AAEhC;EACA,IAAIC,SAAS,GAAG,CAAC,EAAE;IACfA,SAAS,IAAI,CAAC,CAAC,CAAA;IACfC,gBAAgB,IAAI,CAAC,CAAC,CAAA;IACtBC,KAAK,IAAI,CAAC,CAAC,CAAA;AACf,GAAA;AAEA,EAAA,MAAME,MAAM,GAAGlD,IAAI,CAACmD,EAAE,CAAA;AACtB;EACA,IAAIJ,gBAAgB,GAAG,CAAC,EAAE;IACtBA,gBAAgB,IAAI,CAAC,CAAC,CAAA;IACtBC,KAAK,IAAI,CAAC,CAAC,CAAA;IACXA,KAAK,IAAIE,MAAM,GAAG,CAAC,CAAA;AACvB,GAAA;;AAEA;EACA,OAAOF,KAAK,GAAG,CAAC,EAAE;AACdA,IAAAA,KAAK,IAAIE,MAAM,CAAA;AACnB,GAAA;EACA,OAAOF,KAAK,GAAG,CAAC,EAAE;AACdA,IAAAA,KAAK,IAAIE,MAAM,CAAA;AACnB,GAAA;EAEA,OAAO,CAACJ,SAAS,EAAEC,gBAAgB,EAAEC,KAAK,EAAEC,cAAc,CAAC,CAAA;AAC/D,CAAA;AAEA,MAAMI,YAAY,GAAG;AACjBC,EAAAA,QAAQ,EAAE,UACNC,OAA8B,EAC9BC,OAA8B,EACvB;AACP,IAAA,OAAO3C,oBAAoB,CAAC0C,OAAO,EAAEC,OAAO,CAAC,CAAA;GAChD;EACDC,OAAO,EAAEjB,QAAQ,CAACC,IAAI;AACtBiB,EAAAA,iBAAiB,EAAE,UAAUb,MAA6B,EAAa;IACnE,OAAO;AACH;MACAc,EAAE,EAAEpE,qBAAC,CAACqE,OAAO,CAAC,IAAI,CAACC,oBAAoB,EAAEhB,MAAM,CAAA;KAClD,CAAA;AACL,GAAA;AACJ,CAAU,CAAA;AAEV,MAAMiB,MAAkB,GAAGvE,qBAAC,CAACwE,MAAM,CAAC,EAAE,EAAEV,YAAY,EAAE;AAClDW,EAAAA,GAAG,EAAE,0FAA0F;AAE/FC,EAAAA,aAAa,EAAE,CACX,CAAC,IAAI,EAAE,IAAI,CAAC,EACZ,CAAC,IAAI,EAAE,IAAI,CAAC,CACf;AAEDC,EAAAA,eAAe,EAAE,UACbC,MAAc,EACmB;AACjC,IAAA,MAAMC,EAAE,GAAGD,MAAM,CAAC,CAAC,CAAC,CAAA;AACpB,IAAA,MAAME,EAAE,GAAGF,MAAM,CAAC,CAAC,CAAC,CAAA;IAEpB,MAAMG,KAAK,GAAGD,EAAE,CAAC,CAAC,CAAC,GAAGD,EAAE,CAAC,CAAC,CAAC,CAAA;IAC3B,MAAMG,GAAG,GAAGF,EAAE,CAAC,CAAC,CAAC,GAAGD,EAAE,CAAC,CAAC,CAAC,CAAA;IAEzB,IAAIE,KAAK,KAAK,CAAC,EAAE;AACb,MAAA,OAAA;AACJ,KAAA;AAEA,IAAA,MAAME,CAAC,GAAGD,GAAG,GAAGD,KAAK,CAAA;AACrB,IAAA,MAAMG,CAAC,GAAGJ,EAAE,CAAC,CAAC,CAAC,GAAGG,CAAC,GAAGH,EAAE,CAAC,CAAC,CAAC,CAAA;AAC3B,IAAA,OAAO,CAACG,CAAC,EAAEC,CAAC,CAAC,CAAA;GAChB;AAEDZ,EAAAA,oBAAoB,EAAE,UAAUhB,MAA6B,EAAEnC,CAAS,EAAE;AACtE,IAAA,MAAM8D,CAAC,GAAG3B,MAAM,CAAC,CAAC,CAAC,CAAA;AACnB,IAAA,MAAM4B,CAAC,GAAG5B,MAAM,CAAC,CAAC,CAAC,CAAA;AACnB,IAAA,OAAO2B,CAAC,GAAG9D,CAAC,GAAG+D,CAAC,CAAA;GACnB;AAEDC,EAAAA,iBAAiB,EAAE,UAAUP,MAAc,EAAE;AACzC,IAAA,MAAMtB,MAA6B,GAAG,IAAI,CAACqB,eAAe,CAACC,MAAM,CAAC,CAAA;AAClE,IAAA,MAAMK,CAAS,GAAG3B,MAAM,CAAC,CAAC,CAAC,CAAA;AAC3B,IAAA,MAAM4B,CAAS,GAAG5B,MAAM,CAAC,CAAC,CAAC,CAAA;AAC3B,IAAA,OAAO,MAAM,GAAG2B,CAAC,CAACG,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,GAAGF,CAAC,CAACE,OAAO,CAAC,CAAC,CAAC,CAAA;AACxD,GAAA;AACJ,CAAC,CAAC,CAAA;AAEF,MAAMC,SAAwB,GAAGrF,qBAAC,CAACwE,MAAM,CAAC,EAAE,EAAEV,YAAY,EAAE;AACxDW,EAAAA,GAAG,EAAE,0FAA0F;AAE/FC,EAAAA,aAAa,EAAE,CACX,CAAC,GAAG,EAAE,GAAG,CAAC,EACV,CAAC,IAAI,EAAE,IAAI,CAAC,CACf;EACDR,OAAO,EAAEjB,QAAQ,CAACE,QAAQ;AAE1BwB,EAAAA,eAAe,EAAE,UAAUC,MAAc,EAAyB;AAC9D,IAAA,MAAMC,EAAE,GAAGD,MAAM,CAAC,CAAC,CAAC,CAAA;AACpB,IAAA,MAAME,EAAE,GAAGF,MAAM,CAAC,CAAC,CAAC,CAAA;;AAEpB;AACA,IAAA,MAAMU,CAAC,GAAGT,EAAE,CAAC,CAAC,CAAC,CAAA;AACf,IAAA,MAAMjD,CAAC,GAAGiD,EAAE,CAAC,CAAC,CAAC,CAAA;;AAEf;IACA,MAAMU,CAAC,GAAG,CAACT,EAAE,CAAC,CAAC,CAAC,GAAGlD,CAAC,KAAK,CAACkD,EAAE,CAAC,CAAC,CAAC,GAAGQ,CAAC,KAAKR,EAAE,CAAC,CAAC,CAAC,GAAGQ,CAAC,CAAC,CAAC,CAAA;AACnD,IAAA,MAAMJ,CAAC,GAAG,CAAC,CAAC,GAAGI,CAAC,GAAGC,CAAC,CAAA;IACpB,MAAMC,CAAC,GAAGD,CAAC,GAAGD,CAAC,GAAGA,CAAC,GAAG1D,CAAC,CAAA;AAEvB,IAAA,OAAO,CAAC2D,CAAC,EAAEL,CAAC,EAAEM,CAAC,CAAC,CAAA;GACnB;AAEDlB,EAAAA,oBAAoB,EAAE,UAClBhB,MAA6B,EAC7BnC,CAAS,EACH;AACN,IAAA,MAAMoE,CAAC,GAAGjC,MAAM,CAAC,CAAC,CAAC,CAAA;AACnB,IAAA,MAAM4B,CAAC,GAAG5B,MAAM,CAAC,CAAC,CAAC,CAAA;AACnB,IAAA,MAAMkC,CAAC,GAAGlC,MAAM,CAAC,CAAC,CAAC,CAAA;IACnB,OAAO,CAACiC,CAAC,GAAGpE,CAAC,GAAG+D,CAAC,IAAI/D,CAAC,GAAGqE,CAAC,CAAA;GAC7B;AAEDrB,EAAAA,iBAAiB,EAAE,UAAUb,MAA6B,EAIxD;IACE,OAAO;AACHiC,MAAAA,CAAC,EAAEjC,MAAM,CAAC,CAAC,CAAC;AACZ4B,MAAAA,CAAC,EAAE5B,MAAM,CAAC,CAAC,CAAC;MACZkC,CAAC,EAAElC,MAAM,CAAC,CAAC,CAAA;KACd,CAAA;GACJ;AAED6B,EAAAA,iBAAiB,EAAE,UAAUP,MAAc,EAAE;AACzC,IAAA,MAAMtB,MAAM,GAAG,IAAI,CAACqB,eAAe,CAACC,MAAM,CAAC,CAAA;AAC3C,IAAA,MAAMW,CAAC,GAAGjC,MAAM,CAAC,CAAC,CAAC,CAAA;AACnB,IAAA,MAAM4B,CAAC,GAAG5B,MAAM,CAAC,CAAC,CAAC,CAAA;AACnB,IAAA,MAAMkC,CAAC,GAAGlC,MAAM,CAAC,CAAC,CAAC,CAAA;IACnB,OACI,MAAM,GACNiC,CAAC,CAACH,OAAO,CAAC,CAAC,CAAC,GACZ,QAAQ,GACRF,CAAC,CAACE,OAAO,CAAC,CAAC,CAAC,GACZ,MAAM,GACNI,CAAC,CAACJ,OAAO,CAAC,CAAC,CAAC,CAAA;AAEpB,GAAA;AACJ,CAAC,CAAC,CAAA;AAEF,MAAMK,QAAsB,GAAGzF,qBAAC,CAACwE,MAAM,CAAC,EAAE,EAAEV,YAAY,EAAE;AACtDW,EAAAA,GAAG,EAAE,0FAA0F;AAE/FC,EAAAA,aAAa,EAAE,CACX,CAAC,GAAG,EAAE,GAAG,CAAC,EACV,CAAC,GAAG,EAAE,GAAG,CAAC,CACb;EACDR,OAAO,EAAEjB,QAAQ,CAACG,QAAQ;AAE1BuB,EAAAA,eAAe,EAAE,UAAUC,MAAc,EAAE;AACvC,IAAA,MAAMC,EAAE,GAAGD,MAAM,CAAC,CAAC,CAAC,CAAA;AACpB,IAAA,MAAME,EAAE,GAAGF,MAAM,CAAC,CAAC,CAAC,CAAA;IAEpB,MAAMW,CAAC,GAAGT,EAAE,CAAC,CAAC,CAAC,GAAGD,EAAE,CAAC,CAAC,CAAC,CAAA;AACvB,IAAA,MAAMK,CAAC,GAAGzE,IAAI,CAACmD,EAAE,IAAI,CAAC,IAAIkB,EAAE,CAAC,CAAC,CAAC,GAAGD,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACzC,IAAA,MAAMW,CAAC,GAAGX,EAAE,CAAC,CAAC,CAAC,GAAGK,CAAC,CAAA;AACnB,IAAA,MAAMQ,CAAC,GAAGb,EAAE,CAAC,CAAC,CAAC,CAAA;IAEf,OAAO,CAACU,CAAC,EAAEL,CAAC,EAAEM,CAAC,EAAEE,CAAC,CAAC,CAAA;GACtB;AAEDpB,EAAAA,oBAAoB,EAAE,UAAUhB,MAA6B,EAAEnC,CAAS,EAAE;AACtE,IAAA,MAAMoE,CAAC,GAAGjC,MAAM,CAAC,CAAC,CAAC,CAAA;AACnB,IAAA,MAAM4B,CAAC,GAAG5B,MAAM,CAAC,CAAC,CAAC,CAAA;AACnB,IAAA,MAAMkC,CAAC,GAAGlC,MAAM,CAAC,CAAC,CAAC,CAAA;AACnB,IAAA,MAAMoC,CAAC,GAAGpC,MAAM,CAAC,CAAC,CAAC,CAAA;AACnB,IAAA,OAAOiC,CAAC,GAAG9E,IAAI,CAACkF,GAAG,CAACT,CAAC,GAAG/D,CAAC,GAAGqE,CAAC,CAAC,GAAGE,CAAC,CAAA;GACrC;AAEDvB,EAAAA,iBAAiB,EAAE,UAAUb,MAA6B,EAAE;IACxD,OAAO;AACHiC,MAAAA,CAAC,EAAEjC,MAAM,CAAC,CAAC,CAAC;AACZ4B,MAAAA,CAAC,EAAE5B,MAAM,CAAC,CAAC,CAAC;AACZkC,MAAAA,CAAC,EAAElC,MAAM,CAAC,CAAC,CAAC;MACZoC,CAAC,EAAEpC,MAAM,CAAC,CAAC,CAAA;KACd,CAAA;GACJ;AAED6B,EAAAA,iBAAiB,EAAE,UAAUP,MAAc,EAAE;AACzC,IAAA,MAAMtB,MAAM,GAAG,IAAI,CAACqB,eAAe,CAACC,MAAM,CAAC,CAAA;AAC3C,IAAA,MAAMW,CAAC,GAAGjC,MAAM,CAAC,CAAC,CAAC,CAAA;AACnB,IAAA,MAAM4B,CAAC,GAAG5B,MAAM,CAAC,CAAC,CAAC,CAAA;AACnB,IAAA,MAAMkC,CAAC,GAAGlC,MAAM,CAAC,CAAC,CAAC,CAAA;AACnB,IAAA,MAAMoC,CAAC,GAAGpC,MAAM,CAAC,CAAC,CAAC,CAAA;AACnB,IAAA,OACI,MAAM,GACNiC,CAAC,CAACH,OAAO,CAAC,CAAC,CAAC,GACZ,OAAO,GACPF,CAAC,CAACE,OAAO,CAAC,CAAC,CAAC,GACZ,MAAM,GACNI,CAAC,CAACJ,OAAO,CAAC,CAAC,CAAC,GACZ,MAAM,GACNM,CAAC,CAACN,OAAO,CAAC,CAAC,CAAC,CAAA;GAEnB;AAEDrB,EAAAA,QAAQ,EAAE,UACNC,OAA8B,EAC9BC,OAA8B,EAChC;IACE,OAAO3C,oBAAoB,CACvB+B,yBAAyB,CAACW,OAAO,CAAC,EAClCX,yBAAyB,CAACY,OAAO,CACrC,CAAC,CAAA;AACL,GAAA;AACJ,CAAC,CAAC,CAAA;AAEF,MAAM2B,OAAoB,GAAG5F,qBAAC,CAACwE,MAAM,CAAC,EAAE,EAAEV,YAAY,EAAE;AACpDW,EAAAA,GAAG,EAAE,0FAA0F;AAE/FC,EAAAA,aAAa,EAAE,CACX,CAAC,GAAG,EAAE,GAAG,CAAC,EACV,CAAC,IAAI,EAAE,IAAI,CAAC,CACf;AAEDC,EAAAA,eAAe,EAAE,UAAUC,MAAc,EAAE;AACvC,IAAA,MAAMC,EAAE,GAAGD,MAAM,CAAC,CAAC,CAAC,CAAA;AACpB,IAAA,MAAME,EAAE,GAAGF,MAAM,CAAC,CAAC,CAAC,CAAA;IAEpB,MAAMW,CAAC,GAAGT,EAAE,CAAC,CAAC,CAAC,GAAGD,EAAE,CAAC,CAAC,CAAC,CAAA;AACvB,IAAA,MAAMK,CAAC,GAAGzE,IAAI,CAACmD,EAAE,IAAI,CAAC,IAAIkB,EAAE,CAAC,CAAC,CAAC,GAAGD,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACzC,IAAA,MAAMW,CAAC,GAAGX,EAAE,CAAC,CAAC,CAAC,GAAGK,CAAC,CAAA;AACnB,IAAA,MAAMQ,CAAC,GAAGb,EAAE,CAAC,CAAC,CAAC,CAAA;IAEf,OAAO,CAACU,CAAC,EAAEL,CAAC,EAAEM,CAAC,EAAEE,CAAC,CAAC,CAAA;GACtB;AAEDpB,EAAAA,oBAAoB,EAAE,UAAUhB,MAA6B,EAAEnC,CAAS,EAAE;AACtE,IAAA,MAAMoE,CAAC,GAAGjC,MAAM,CAAC,CAAC,CAAC,CAAA;AACnB,IAAA,MAAM4B,CAAC,GAAG5B,MAAM,CAAC,CAAC,CAAC,CAAA;AACnB,IAAA,MAAMkC,CAAC,GAAGlC,MAAM,CAAC,CAAC,CAAC,CAAA;AACnB,IAAA,MAAMoC,CAAC,GAAGpC,MAAM,CAAC,CAAC,CAAC,CAAA;AACnB,IAAA,OAAOiC,CAAC,GAAG9E,IAAI,CAACoF,GAAG,CAACX,CAAC,GAAG/D,CAAC,GAAGqE,CAAC,CAAC,GAAGE,CAAC,CAAA;GACrC;AAEDP,EAAAA,iBAAiB,EAAE,UAAUP,MAAc,EAAE;AACzC,IAAA,MAAMtB,MAAM,GAAG,IAAI,CAACqB,eAAe,CAACC,MAAM,CAAC,CAAA;AAC3C,IAAA,MAAMW,CAAC,GAAGjC,MAAM,CAAC,CAAC,CAAC,CAAA;AACnB,IAAA,MAAM4B,CAAC,GAAG5B,MAAM,CAAC,CAAC,CAAC,CAAA;AACnB,IAAA,MAAMkC,CAAC,GAAGlC,MAAM,CAAC,CAAC,CAAC,CAAA;AACnB,IAAA,MAAMoC,CAAC,GAAGpC,MAAM,CAAC,CAAC,CAAC,CAAA;AACnB,IAAA,OACI,MAAM,GACNiC,CAAC,CAACH,OAAO,CAAC,CAAC,CAAC,GACZ,OAAO,GACPF,CAAC,CAACE,OAAO,CAAC,CAAC,CAAC,GACZ,MAAM,GACNI,CAAC,CAACJ,OAAO,CAAC,CAAC,CAAC,GACZ,MAAM,GACNM,CAAC,CAACN,OAAO,CAAC,CAAC,CAAC,CAAA;GAEnB;AAEDrB,EAAAA,QAAQ,EAAE,UACNC,OAA8B,EAC9BC,OAA8B,EAChC;IACE,OAAO3C,oBAAoB,CACvBuC,4BAA4B,CAACG,OAAO,CAAC,EACrCH,4BAA4B,CAACI,OAAO,CACxC,CAAC,CAAA;AACL,GAAA;AACJ,CAAC,CAAC,CAAA;AAEF,MAAM6B,WAA4B,GAAG9F,qBAAC,CAACwE,MAAM,CAAC,EAAE,EAAEV,YAAY,EAAE;AAC5DW,EAAAA,GAAG,EAAE,0FAA0F;AAE/FC,EAAAA,aAAa,EAAE,CACX,CAAC,GAAG,EAAE,IAAI,CAAC,EACX,CAAC,IAAI,EAAE,IAAI,CAAC,CACf;AAEDqB,EAAAA,gBAAgB,EAAE,CACd,CAAC,CAAC,EAAE,GAAG,CAAC,EACR,CAAC,GAAG,EAAE,GAAG,CAAC,CACb;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACIC,EAAAA,oBAAoB,EAAE,UAClBC,QAAe,EACfC,QAAe,EACftB,MAAc,EACduB,SAAiB,EACjBC,KAAK,EACP;IACE,MAAMhF,CAAS,GAAG+E,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACjC,IAAA,OAAOnG,qBAAC,CAAC0B,GAAG,CAACkD,MAAM,EAAGyB,KAAK,IAAKA,KAAK,CAAC,CAAC,CAAC,KAAKjF,CAAC,CAAC,CAAA;GAClD;AAEDkF,EAAAA,wBAAwB,EAAE,UACtBL,QAAe,EACfC,QAAe,EACftB,MAAc,EACduB,SAAiB,EACjBC,KAAK,EACA;AACL,IAAA,MAAMhF,CAAC,GAAG6E,QAAQ,CAAC,CAAC,CAAC,CAAA;AACrB,IAAA,MAAMM,OAAO,GACTvG,qBAAC,CAAC0B,GAAG,CAACkD,MAAM,EAAGyB,KAAK,IAAKA,KAAK,CAAC,CAAC,CAAC,GAAGjF,CAAC,CAAC,IACtCpB,qBAAC,CAAC0B,GAAG,CAACkD,MAAM,EAAGyB,KAAK,IAAKA,KAAK,CAAC,CAAC,CAAC,GAAGjF,CAAC,CAAC,CAAA;AAE1C,IAAA,IAAImF,OAAO,EAAE;AACT,MAAA,OAAO,CAACL,QAAQ,CAAC,CAAC,CAAC,EAAE9E,CAAC,CAAC,CAAA;AAC3B,KAAA;AACA;AACA;AACA,IAAA,MAAMoF,IAAI,GAAGN,QAAQ,CAAC,CAAC,CAAC,CAAA;AACxB,IAAA,MAAMO,QAAQ,GAAGzG,qBAAC,CAAC0B,GAAG,CAACkD,MAAM,EAAGyB,KAAK,IAAKA,KAAK,CAAC,CAAC,CAAC,GAAGG,IAAI,CAAC,CAAA;AAC1D,IAAA,IAAIC,QAAQ,EAAE;AACV,MAAA,MAAMC,UAAU,GAAG1G,qBAAC,CAAC2G,GAAG,CAAC3G,qBAAC,CAACgD,GAAG,CAAC4B,MAAM,EAAGyB,KAAK,IAAKA,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAC5D,MAAA,OAAO,CAACH,QAAQ,CAAC,CAAC,CAAC,EAAEQ,UAAU,GAAGN,KAAK,CAACQ,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;AACxD,KAAA;AACA,IAAA,MAAMC,OAAO,GAAG7G,qBAAC,CAACU,GAAG,CAACV,qBAAC,CAACgD,GAAG,CAAC4B,MAAM,EAAGyB,KAAK,IAAKA,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACzD,IAAA,OAAO,CAACH,QAAQ,CAAC,CAAC,CAAC,EAAEW,OAAO,GAAGT,KAAK,CAACQ,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;GACpD;AAEDE,EAAAA,yBAAyB,EAAE,IAAI;AAE/BnC,EAAAA,eAAe,EAAE,UACbC,MAAc,EACduB,SAAiB,EACI;AACrB,IAAA,MAAMtB,EAAE,GAAGD,MAAM,CAAC,CAAC,CAAC,CAAA;AACpB,IAAA,MAAME,EAAE,GAAGF,MAAM,CAAC,CAAC,CAAC,CAAA;IAEpB,MAAMY,CAAC,GAAGW,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACzB,IAAA,MAAMjB,CAAC,GAAGzE,IAAI,CAACsG,GAAG,CAAC,CAAClC,EAAE,CAAC,CAAC,CAAC,GAAGW,CAAC,KAAKV,EAAE,CAAC,CAAC,CAAC,GAAGU,CAAC,CAAC,CAAC,IAAIX,EAAE,CAAC,CAAC,CAAC,GAAGC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IAC/D,MAAMS,CAAC,GAAG,CAACV,EAAE,CAAC,CAAC,CAAC,GAAGW,CAAC,IAAI/E,IAAI,CAACuG,GAAG,CAAC9B,CAAC,GAAGL,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;AAC3C,IAAA,OAAO,CAACU,CAAC,EAAEL,CAAC,EAAEM,CAAC,CAAC,CAAA;GACnB;AAEDlB,EAAAA,oBAAoB,EAAE,UAClBhB,MAA6B,EAC7BnC,CAAS,EACH;AACN,IAAA,MAAMoE,CAAC,GAAGjC,MAAM,CAAC,CAAC,CAAC,CAAA;AACnB,IAAA,MAAM4B,CAAC,GAAG5B,MAAM,CAAC,CAAC,CAAC,CAAA;AACnB,IAAA,MAAMkC,CAAC,GAAGlC,MAAM,CAAC,CAAC,CAAC,CAAA;IACnB,OAAOiC,CAAC,GAAG9E,IAAI,CAACuG,GAAG,CAAC9B,CAAC,GAAG/D,CAAC,CAAC,GAAGqE,CAAC,CAAA;GACjC;AAEDL,EAAAA,iBAAiB,EAAE,UAAUP,MAAc,EAAEuB,SAAiB,EAAE;IAC5D,IAAI,CAACA,SAAS,EAAE;AACZ,MAAA,OAAO,IAAI,CAAA;AACf,KAAA;IACA,MAAM7C,MAAM,GAAG,IAAI,CAACqB,eAAe,CAACC,MAAM,EAAEuB,SAAS,CAAC,CAAA;AACtD,IAAA,MAAMZ,CAAC,GAAGjC,MAAM,CAAC,CAAC,CAAC,CAAA;AACnB,IAAA,MAAM4B,CAAC,GAAG5B,MAAM,CAAC,CAAC,CAAC,CAAA;AACnB,IAAA,MAAMkC,CAAC,GAAGlC,MAAM,CAAC,CAAC,CAAC,CAAA;IACnB,OACI,MAAM,GACNiC,CAAC,CAACH,OAAO,CAAC,CAAC,CAAC,GACZ,KAAK,GACLF,CAAC,CAACE,OAAO,CAAC,CAAC,CAAC,GACZ,OAAO,GACPI,CAAC,CAACJ,OAAO,CAAC,CAAC,CAAC,CAAA;AAEpB,GAAA;AACJ,CAAC,CAAC,CAAA;AAEF,MAAM6B,SAAwB,GAAGjH,qBAAC,CAACwE,MAAM,CAAC,EAAE,EAAEV,YAAY,EAAE;AACxDW,EAAAA,GAAG,EAAE,0FAA0F;AAE/FC,EAAAA,aAAa,EAAE,CACX,CAAC,IAAI,EAAE,GAAG,CAAC,EACX,CAAC,IAAI,EAAE,IAAI,CAAC,CACf;AAEDqB,EAAAA,gBAAgB,EAAE,CACd,CAAC,GAAG,EAAE,CAAC,CAAC,EACR,CAAC,GAAG,EAAE,GAAG,CAAC,CACb;AAEDC,EAAAA,oBAAoB,EAAE,UAClBC,QAAe,EACfC,QAAe,EACftB,MAAa,EACbuB,SAAiB,EACjBC,KAAK,EACP;IACE,MAAMjF,CAAC,GAAGgF,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACzB,IAAA,OACInG,qBAAC,CAAC0B,GAAG,CAACkD,MAAM,EAAGyB,KAAK,IAAKA,KAAK,CAAC,CAAC,CAAC,KAAKlF,CAAC,CAAC,IACxCyD,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAKA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;GAEpC;AAED0B,EAAAA,wBAAwB,EAAE,UACtBL,QAAe,EACfC,QAAe,EACftB,MAAc,EACduB,SAAiB,EACjBC,KAAK,EACgB;AACrB,IAAA,MAAMjF,CAAC,GAAG8E,QAAQ,CAAC,CAAC,CAAC,CAAA;AACrB,IAAA,MAAMM,OAAO,GACTvG,qBAAC,CAAC0B,GAAG,CAACkD,MAAM,EAAGyB,KAAK,IAAKA,KAAK,CAAC,CAAC,CAAC,GAAGlF,CAAC,CAAC,IACtCnB,qBAAC,CAAC0B,GAAG,CAACkD,MAAM,EAAGyB,KAAK,IAAKA,KAAK,CAAC,CAAC,CAAC,GAAGlF,CAAC,CAAC,CAAA;AAE1C,IAAA,IAAIoF,OAAO,EAAE;AACT,MAAA,OAAO,CAACpF,CAAC,EAAE+E,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;AAC3B,KAAA;AACA;AACA;AACA,IAAA,MAAMgB,IAAI,GAAGhB,QAAQ,CAAC,CAAC,CAAC,CAAA;AACxB,IAAA,MAAMiB,OAAO,GAAGnH,qBAAC,CAAC0B,GAAG,CAACkD,MAAM,EAAGyB,KAAK,IAAKA,KAAK,CAAC,CAAC,CAAC,GAAGa,IAAI,CAAC,CAAA;AACzD,IAAA,IAAIC,OAAO,EAAE;AACT,MAAA,MAAMC,QAAQ,GAAGpH,qBAAC,CAAC2G,GAAG,CAAC3G,qBAAC,CAACgD,GAAG,CAAC4B,MAAM,EAAGyB,KAAK,IAAKA,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAC1D,MAAA,OAAO,CAACe,QAAQ,GAAGhB,KAAK,CAACQ,QAAQ,CAAC,CAAC,CAAC,EAAEV,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;AACtD,KAAA;AACA,IAAA,MAAMmB,SAAS,GAAGrH,qBAAC,CAACU,GAAG,CAACV,qBAAC,CAACgD,GAAG,CAAC4B,MAAM,EAAGyB,KAAK,IAAKA,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAC3D,IAAA,OAAO,CAACgB,SAAS,GAAGjB,KAAK,CAACQ,QAAQ,CAAC,CAAC,CAAC,EAAEV,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;GACtD;AAEDY,EAAAA,yBAAyB,EAAE,IAAI;AAE/BnC,EAAAA,eAAe,EAAE,UACbC,MAAc,EACduB,SAAiB,EACgB;AACjC;AACA;AACA;AACA;AACA,IAAA,MAAMmB,IAAI,GAAIjB,KAAY,IAAY,CAACA,KAAK,CAAC,CAAC,CAAC,EAAEA,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAC1D,MAAMkB,aAAa,GAAGzB,WAAW,CAACnB,eAAe,CAC7C3E,qBAAC,CAACgD,GAAG,CAAC4B,MAAM,EAAE0C,IAAI,CAAC,EACnBtH,qBAAC,CAACgD,GAAG,CAACmD,SAAS,EAAEmB,IAAI,CACzB,CAAC,CAAA;AACD,IAAA,IAAIC,aAAa,EAAE;MACf,MAAM/B,CAAC,GAAG,CAAC+B,aAAa,CAAC,CAAC,CAAC,GAAGA,aAAa,CAAC,CAAC,CAAC,CAAA;AAC9C,MAAA,MAAMrC,CAAC,GAAG,CAAC,GAAGqC,aAAa,CAAC,CAAC,CAAC,CAAA;AAC9B,MAAA,MAAMhC,CAAC,GAAG,CAAC,GAAGgC,aAAa,CAAC,CAAC,CAAC,CAAA;AAC9B,MAAA,OAAO,CAAChC,CAAC,EAAEL,CAAC,EAAEM,CAAC,CAAC,CAAA;AACpB,KAAA;GACH;EAEDlB,oBAAoB,EAAE,UAClBhB,MAA6B,EAC7BnC,CAAS,EACTgF,SAAiB,EACnB;AACE,IAAA,MAAMZ,CAAC,GAAGjC,MAAM,CAAC,CAAC,CAAC,CAAA;AACnB,IAAA,MAAM4B,CAAC,GAAG5B,MAAM,CAAC,CAAC,CAAC,CAAA;AACnB,IAAA,MAAMkC,CAAC,GAAGlC,MAAM,CAAC,CAAC,CAAC,CAAA;IACnB,OAAOiC,CAAC,GAAG9E,IAAI,CAACsG,GAAG,CAAC7B,CAAC,GAAG/D,CAAC,GAAGqE,CAAC,CAAC,CAAA;GACjC;AAEDL,EAAAA,iBAAiB,EAAE,UAAUP,MAAc,EAAEuB,SAAiB,EAAE;IAC5D,IAAI,CAACA,SAAS,EAAE;AACZ,MAAA,OAAO,IAAI,CAAA;AACf,KAAA;IACA,MAAM7C,MAA6B,GAAG,IAAI,CAACqB,eAAe,CACtDC,MAAM,EACNuB,SACJ,CAAC,CAAA;AACD,IAAA,MAAMZ,CAAC,GAAGjC,MAAM,CAAC,CAAC,CAAC,CAAA;AACnB,IAAA,MAAM4B,CAAC,GAAG5B,MAAM,CAAC,CAAC,CAAC,CAAA;AACnB,IAAA,MAAMkC,CAAC,GAAGlC,MAAM,CAAC,CAAC,CAAC,CAAA;IACnB,OACI,SAAS,GACTiC,CAAC,CAACH,OAAO,CAAC,CAAC,CAAC,GACZ,MAAM,GACNF,CAAC,CAACE,OAAO,CAAC,CAAC,CAAC,GACZ,MAAM,GACNI,CAAC,CAACJ,OAAO,CAAC,CAAC,CAAC,CAAA;AAEpB,GAAA;AACJ,CAAC,CAAC,CAAA;AAEF,MAAMoC,aAAgC,GAAGxH,qBAAC,CAACwE,MAAM,CAAC,EAAE,EAAEV,YAAY,EAAE;AAChEW,EAAAA,GAAG,EAAE,0FAA0F;AAE/FC,EAAAA,aAAa,EAAE,CACX,CAAC,GAAG,EAAE,GAAG,CAAC,EACV,CAAC,IAAI,EAAE,IAAI,CAAC,CACf;AAEDC,EAAAA,eAAe,EAAE,UACbC,MAAc,EACmB;AACjC,IAAA,MAAMC,EAAE,GAAGD,MAAM,CAAC,CAAC,CAAC,CAAA;AACpB,IAAA,MAAME,EAAE,GAAGF,MAAM,CAAC,CAAC,CAAC,CAAA;IAEpB,MAAMG,KAAK,GAAGD,EAAE,CAAC,CAAC,CAAC,GAAGD,EAAE,CAAC,CAAC,CAAC,CAAA;IAC3B,MAAMG,GAAG,GAAGF,EAAE,CAAC,CAAC,CAAC,GAAGD,EAAE,CAAC,CAAC,CAAC,CAAA;IAEzB,IAAIE,KAAK,KAAK,CAAC,EAAE;AACb,MAAA,OAAA;AACJ,KAAA;IAEA,IAAIE,CAAC,GAAGxE,IAAI,CAACY,GAAG,CAAC2D,GAAG,GAAGD,KAAK,CAAC,CAAA;IAC7B,IAAID,EAAE,CAAC,CAAC,CAAC,GAAGD,EAAE,CAAC,CAAC,CAAC,EAAE;MACfI,CAAC,IAAI,CAAC,CAAC,CAAA;AACX,KAAA;AACA,IAAA,MAAMwC,gBAAgB,GAAG5C,EAAE,CAAC,CAAC,CAAC,CAAA;AAC9B,IAAA,MAAMnB,cAAc,GAAGmB,EAAE,CAAC,CAAC,CAAC,CAAA;AAE5B,IAAA,OAAO,CAACI,CAAC,EAAEwC,gBAAgB,EAAE/D,cAAc,CAAC,CAAA;GAC/C;AAEDY,EAAAA,oBAAoB,EAAE,UAAUhB,MAA6B,EAAEnC,CAAS,EAAE;AACtE,IAAA,MAAM8D,CAAC,GAAG3B,MAAM,CAAC,CAAC,CAAC,CAAA;AACnB,IAAA,MAAMmE,gBAAgB,GAAGnE,MAAM,CAAC,CAAC,CAAC,CAAA;AAClC,IAAA,MAAMI,cAAc,GAAGJ,MAAM,CAAC,CAAC,CAAC,CAAA;IAChC,OAAO2B,CAAC,GAAGxE,IAAI,CAACY,GAAG,CAACF,CAAC,GAAGsG,gBAAgB,CAAC,GAAG/D,cAAc,CAAA;GAC7D;AAEDyB,EAAAA,iBAAiB,EAAE,UAAUP,MAAc,EAAE;AACzC,IAAA,MAAMtB,MAA6B,GAAG,IAAI,CAACqB,eAAe,CAACC,MAAM,CAAC,CAAA;AAClE,IAAA,MAAMK,CAAC,GAAG3B,MAAM,CAAC,CAAC,CAAC,CAAA;AACnB,IAAA,MAAMmE,gBAAgB,GAAGnE,MAAM,CAAC,CAAC,CAAC,CAAA;AAClC,IAAA,MAAMI,cAAc,GAAGJ,MAAM,CAAC,CAAC,CAAC,CAAA;IAChC,OACI,MAAM,GACN2B,CAAC,CAACG,OAAO,CAAC,CAAC,CAAC,GACZ,QAAQ,GACRqC,gBAAgB,CAACrC,OAAO,CAAC,CAAC,CAAC,GAC3B,MAAM,GACN1B,cAAc,CAAC0B,OAAO,CAAC,CAAC,CAAC,CAAA;AAEjC,GAAA;AACJ,CAAC,CAAC,CAAA;;AAEF;AACA,MAAMsC,mBAAmB,GAAG;AACxBC,EAAAA,MAAM,EAAEpD,MAAM;AACdqD,EAAAA,SAAS,EAAEvC,SAAS;AACpBwC,EAAAA,QAAQ,EAAEpC,QAAQ;AAClBqC,EAAAA,OAAO,EAAElC,OAAO;AAChBmC,EAAAA,WAAW,EAAEjC,WAAW;AACxBkC,EAAAA,SAAS,EAAEf,SAAS;AACpBgB,EAAAA,cAAc,EAAET,aAAAA;AACpB,CAAU,CAAA;AAEH,MAAMU,QAAa,GAAGlI,qBAAC,CAACmI,IAAI,CAACT,mBAAmB,CAAC,CAAA;AAejD,SAASU,eAAeA,CAC3B7F,IAAO,EACiB;AACxB;AACA;EACA,OAAOmF,mBAAmB,CAACnF,IAAI,CAAC,CAAA;AACpC;;;;;;;;;ACnoBO,SAAS8F,eAAeA,CAACC,SAA4B,EAAW;AACnE,EAAA,MAAMC,YAAY,GAAGC,iBAAiB,EAAE,CAAA;AACxC,EAAA,MAAMC,gBAAgB,GAAGD,iBAAiB,EAAE,CAAA;AAC5C,EAAA,MAAME,YAAY,GAAGC,iBAAiB,EAAE,CAAA;AACxC,EAAA,MAAMC,aAAa,GAAGC,IAAI,CAACC,SAAS,CAAC;AACjCC,IAAAA,UAAU,EAAE;AACRC,MAAAA,UAAU,EAAE,KAAK;AACjBC,MAAAA,SAAS,EAAE,KAAK;AAChBC,MAAAA,iCAAiC,EAAE,KAAK;AACxCC,MAAAA,+BAA+B,EAAE,KAAK;AACtCC,MAAAA,8BAA8B,EAAE,KAAK;AACrCC,MAAAA,aAAa,EAAE,KAAK;AACpBC,MAAAA,oBAAoB,EAAE,KAAK;AAC3BC,MAAAA,MAAM,EAAE,KAAK;AACbC,MAAAA,MAAM,EAAE,KAAA;KACX;IACDC,KAAK,EAAE,CAAChB,gBAAgB,EAAE,IAAIhI,IAAI,CAACiJ,KAAK,CAACjJ,IAAI,CAACkJ,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;AACnEC,IAAAA,eAAe,EAAE;AAACC,MAAAA,KAAK,EAAE,CAAC;AAAEC,MAAAA,KAAK,EAAE,CAAA;KAAE;AACrCC,IAAAA,QAAQ,EAAE;MACN9H,OAAO,EAAE,CAAGsG,EAAAA,YAAY,CAAE,CAAA;MAC1ByB,MAAM,EAAE,EAAE;AACV9H,MAAAA,OAAO,EAAE;AACL+H,QAAAA,WAAW,EAAE;AACTC,UAAAA,SAAS,EAAE,SAAS;AACpBC,UAAAA,MAAM,EAAE,KAAK;AACbC,UAAAA,OAAO,EAAE;AACLC,YAAAA,WAAW,EAAE,CACT;AACIC,cAAAA,UAAU,EAAE,OAAO;AACnBC,cAAAA,IAAI,EAAE,KAAK;AACXC,cAAAA,GAAG,EAAE,CAAC;AACNC,cAAAA,QAAQ,EAAE,KAAK;cACfC,KAAK,EAAE,GAAGhC,YAAY,CAAA,CAAA;AAC1B,aAAC,CACJ;AACDiC,YAAAA,SAAS,EAAE,QAAQ;YACnBC,UAAU,EAAE,CAAC,OAAO,CAAC;AACrBC,YAAAA,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC1BC,YAAAA,MAAM,EAAE,IAAI;AACZC,YAAAA,KAAK,EAAE,KAAK;AACZC,YAAAA,YAAY,EAAE,QAAA;WACjB;AACDF,UAAAA,MAAM,EAAE,IAAI;AACZvI,UAAAA,IAAI,EAAE,YAAY;AAClB0I,UAAAA,OAAO,EAAE;AAACpB,YAAAA,KAAK,EAAE,CAAC;AAAEC,YAAAA,KAAK,EAAE,CAAA;AAAC,WAAA;AAChC,SAAA;AACJ,OAAA;AACJ,KAAA;AACJ,GAAC,CAAC,CAAA;AACF,EAAA,MAAMoB,QAAQ,GAAGC,aAAa,CAACvC,aAAa,CAACwC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAA;AAClE,EAAA,MAAMC,cAAc,GAAG/C,SAAS,CAAC4C,QAAQ,CAAC,CAAA;EAC1C,MAAMI,kBAA0B,GAC5BD,cAAc,CAACE,IAAI,CAACC,cAAc,CAACC,IAAI,CAACC,QAAQ,CAAA;AACpD,EAAA,OAAOpK,oBAAoB,CAACgK,kBAAkB,EAAE1C,aAAa,CAAC,CAAA;AAClE,CAAA;AAEA,SAASD,iBAAiBA,GAA8B;AAAA,EAAA,IAA7BgD,UAAmB,GAAAC,SAAA,CAAApL,MAAA,GAAA,CAAA,IAAAoL,SAAA,CAAA,CAAA,CAAA,KAAAC,SAAA,GAAAD,SAAA,CAAA,CAAA,CAAA,GAAG,KAAK,CAAA;EAClD,IAAIlD,YAAoB,GAAG,EAAE,CAAA;AAC7B,EAAA,MAAMoD,YAAY,GAAGrL,IAAI,CAACiJ,KAAK,CAACjJ,IAAI,CAACkJ,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;EACtD,KAAK,IAAIlI,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGqK,YAAY,EAAErK,CAAC,EAAE,EAAE;IACnC,MAAMsK,YAAY,GAAGC,MAAM,CAACC,YAAY,CACpC,EAAE,GAAGxL,IAAI,CAACiJ,KAAK,CAACjJ,IAAI,CAACkJ,MAAM,EAAE,GAAG,EAAE,CACtC,CAAC,CAAA;AACDjB,IAAAA,YAAY,IACRiD,UAAU,IAAIlK,CAAC,KAAK,CAAC,GAAGsK,YAAY,CAACG,WAAW,EAAE,GAAGH,YAAY,CAAA;AACzE,GAAA;AACA,EAAA,OAAOrD,YAAY,CAAA;AACvB,CAAA;AAEA,SAASF,iBAAiBA,GAAG;EACzB,MAAM2D,OAAiB,GAAG,EAAE,CAAA;AAC5B,EAAA,MAAML,YAAY,GAAGrL,IAAI,CAACiJ,KAAK,CAACjJ,IAAI,CAACkJ,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;EACvD,KAAK,IAAIlI,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGqK,YAAY,EAAErK,CAAC,EAAE,EAAE;IACnC0K,OAAO,CAAC9J,IAAI,CAACsG,iBAAiB,CAAClH,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAC5C,GAAA;AACA,EAAA,MAAM2K,aAAa,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;AACjC,EAAA,MAAMC,WAAW,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;AAC/B,EAAA,MAAMC,aAAa,GAAG7L,IAAI,CAACiJ,KAAK,CAACjJ,IAAI,CAACkJ,MAAM,EAAE,GAAGyC,aAAa,CAAC5L,MAAM,CAAC,CAAA;AACtE,EAAA,OAAO,GAAG4L,aAAa,CAACE,aAAa,CAAC,GAAGH,OAAO,CAACI,IAAI,CAAC,GAAG,CAAC,CAAA,EAAGF,WAAW,CAACC,aAAa,CAAC,CAAE,CAAA,CAAA;AAC7F,CAAA;AAEA,SAASnB,aAAaA,CAACqB,UAAkB,EAAE;EACvC,OAAO,CAAA,wJAAA,EAA2JA,UAAU,CAA+E,6EAAA,CAAA,CAAA;AAC/P;;ACrFmB,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK;;ACOrC,SAASC,OAAOA,CAAI/B,KAAQ,EAAc;EAC7C,OAAO;AAACnI,IAAAA,IAAI,EAAE,SAAS;AAAEmI,IAAAA,KAAAA;GAAM,CAAA;AACnC,CAAA;AAEO,SAASgC,OAAOA,CAAIC,MAAS,EAAc;EAC9C,OAAO;AAACpK,IAAAA,IAAI,EAAE,SAAS;AAAEoK,IAAAA,MAAAA;GAAO,CAAA;AACpC,CAAA;AAEO,SAASC,SAASA,CAAOC,MAAoB,EAAwB;AACxE,EAAA,OAAOA,MAAM,CAACtK,IAAI,KAAK,SAAS,CAAA;AACpC,CAAA;AAEO,SAASuK,SAASA,CAAOD,MAAoB,EAAwB;AACxE,EAAA,OAAOA,MAAM,CAACtK,IAAI,KAAK,SAAS,CAAA;AACpC,CAAA;;AAqCA;AACA;AACO,SAASb,GAAGA,CACfqL,OAA4B,EAEd;AAAA,EAAA,IADdC,qBAAwC,GAAApB,SAAA,CAAApL,MAAA,GAAAoL,CAAAA,IAAAA,SAAA,CAAAC,CAAAA,CAAAA,KAAAA,SAAA,GAAAD,SAAA,CAAIrG,CAAAA,CAAAA,GAAAA,CAAC,IAAKA,CAAC,CAAA;EAEnD,MAAM0H,MAAW,GAAG,EAAE,CAAA;EACtB,MAAMC,cAAmB,GAAG,EAAE,CAAA;AAC9B,EAAA,KAAK,MAAML,MAAM,IAAIE,OAAO,EAAE;AAC1B,IAAA,IAAIF,MAAM,CAACtK,IAAI,KAAK,SAAS,EAAE;AAC3B0K,MAAAA,MAAM,CAAC5K,IAAI,CAACwK,MAAM,CAACnC,KAAK,CAAC,CAAA;AAC7B,KAAC,MAAM;AACHwC,MAAAA,cAAc,CAAC7K,IAAI,CAACwK,MAAM,CAACF,MAAM,CAAC,CAAA;AACtC,KAAA;AACJ,GAAA;AAEA,EAAA,IAAIO,cAAc,CAAC1M,MAAM,GAAG,CAAC,EAAE;IAC3B,OAAOkM,OAAO,CAACQ,cAAc,CAACC,MAAM,CAACH,qBAAqB,CAAC,CAAC,CAAA;AAChE,GAAA;EACA,OAAOP,OAAO,CAACQ,MAAM,CAAC,CAAA;AAC1B;;ACzEO,MAAMG,yBAAyB,CAAyB;EAC3DC,WAAWA,CAAkBC,IAAmB,EAAE;IAAA,IAArBA,CAAAA,IAAmB,GAAnBA,IAAmB,CAAA;AAAG,GAAA;AAEnDZ,EAAAA,OAAOA,CACHa,QAA2B,EAC3BC,QAAiB,EACE;IACnB,OAAOd,OAAO,CAAC,CACX;AACIa,MAAAA,QAAQ,EAAEE,WAAW,CAACF,QAAQ,CAAC;MAC/BC,QAAQ;MACRF,IAAI,EAAE,IAAI,CAACA,IAAAA;AACf,KAAC,CACJ,CAAC,CAAA;AACN,GAAA;EAEAI,UAAUA,CAAClD,GAAgB,EAAgB;IACvC,OAAO,IAAI4C,yBAAyB,CAAC,CAAC,GAAG,IAAI,CAACE,IAAI,EAAE9C,GAAG,CAAC,CAAC,CAAA;AAC7D,GAAA;EAEAiC,OAAOA,CAAI/B,KAAQ,EAAc;IAC7B,OAAO+B,OAAO,CAAC/B,KAAK,CAAC,CAAA;AACzB,GAAA;AACJ,CAAA;AAEA,SAAS+C,WAAWA,CAAClI,CAAoB,EAAY;EACjD,OAAOhE,KAAK,CAACC,OAAO,CAAC+D,CAAC,CAAC,GAAGA,CAAC,GAAG,CAACA,CAAC,CAAC,CAAA;AACrC;;AC9BO,SAASoI,UAAUA,CAACL,IAAmB,EAAU;AACpD,EAAA,OAAO,QAAQ,GAAGA,IAAI,CAACtK,GAAG,CAAC4K,iBAAiB,CAAC,CAACrB,IAAI,CAAC,EAAE,CAAC,CAAA;AAC1D,CAAA;AAEA,SAASqB,iBAAiBA,CAACC,OAAoB,EAAU;AACrD,EAAA,IAAI,OAAOA,OAAO,KAAK,QAAQ,EAAE;AAC7B,IAAA,OAAOC,eAAe,CAACC,IAAI,CAACF,OAAO,CAAC,GAC9B,GAAG,GAAGA,OAAO,GACb,IAAIhF,IAAI,CAACC,SAAS,CAAC+E,OAAO,CAAC,CAAG,CAAA,CAAA,CAAA;AACxC,GAAA;AACA,EAAA,OAAO,IAAIA,OAAO,CAACtN,QAAQ,EAAE,CAAG,CAAA,CAAA,CAAA;AACpC,CAAA;AAEA,MAAMuN,eAAe,GAAG,4BAA4B;;ACX7C,SAASE,OAAOA,CAACtB,OAAiB,EAAU;AAC/C,EAAA,MAAMa,QAAQ,GAAGU,OAAO,CAACvB,OAAO,CAACa,QAAQ,CAAC,CAAA;AAC1C,EAAA,MAAMD,IAAI,GAAGK,UAAU,CAACjB,OAAO,CAACY,IAAI,CAAC,CAAA;EACrC,MAAME,QAAQ,GAAG3E,IAAI,CAACC,SAAS,CAAC4D,OAAO,CAACc,QAAQ,CAAC,CAAA;AACjD,EAAA,OAAO,MAAMF,IAAI,CAAA,aAAA,EAAgBC,QAAQ,CAAA,UAAA,EAAaC,QAAQ,CAAE,CAAA,CAAA;AACpE,CAAA;AAEA,SAASS,OAAOA,CAACC,KAAe,EAAU;EACtC,QAAQA,KAAK,CAAC1N,MAAM;AAChB;AACA,IAAA,KAAK,CAAC;MACF,OAAO0N,KAAK,CAAC,CAAC,CAAC,CAAA;AACnB,IAAA,KAAK,CAAC;AACF,MAAA,OAAOA,KAAK,CAAC3B,IAAI,CAAC,MAAM,CAAC,CAAA;AAC7B,IAAA;AAAS,MAAA;AACL,QAAA,MAAM4B,UAAU,GAAGD,KAAK,CAACE,KAAK,CAAC,CAAC,EAAEF,KAAK,CAAC1N,MAAM,GAAG,CAAC,CAAC,CAAA;QACnD,MAAM6N,IAAI,GAAGH,KAAK,CAACA,KAAK,CAAC1N,MAAM,GAAG,CAAC,CAAC,CAAA;QACpC,OAAO2N,UAAU,CAAC5B,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG8B,IAAI,CAAA;AACjD,OAAA;AACJ,GAAA;AACJ;;ACjBO,SAASC,KAAKA,CAAI5D,KAAc,EAAE6D,MAAiB,EAAqB;EAC3E,MAAM1B,MAAM,GAAG0B,MAAM,CAAC7D,KAAK,EAAE,IAAI0C,yBAAyB,CAAC,EAAE,CAAC,CAAC,CAAA;AAC/D,EAAA,IAAIR,SAAS,CAACC,MAAM,CAAC,EAAE;AACnB,IAAA,OAAOH,OAAO,CAACG,MAAM,CAACF,MAAM,CAAC3J,GAAG,CAACgL,OAAO,CAAC,CAACzB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;AACzD,GAAA;AACA,EAAA,OAAOM,MAAM,CAAA;AACjB;;ACXO,MAAM2B,GAAgB,GAAGA,CAACC,QAAQ,EAAEC,GAAG,KAAKA,GAAG,CAACjC,OAAO,CAACgC,QAAQ,CAAC;;ACEjE,SAASE,KAAKA,CAAIC,aAAwB,EAAe;AAC5D,EAAA,OAAO,CAACH,QAAiB,EAAEC,GAAiB,KAAK;AAC7C,IAAA,IAAI,CAACnN,KAAK,CAACC,OAAO,CAACiN,QAAQ,CAAC,EAAE;AAC1B,MAAA,OAAOC,GAAG,CAAChC,OAAO,CAAC,OAAO,EAAE+B,QAAQ,CAAC,CAAA;AACzC,KAAA;IACA,MAAMI,cAAc,GAAGJ,QAAQ,CAACzL,GAAG,CAAC,CAAC8L,IAAI,EAAErN,CAAC,KACxCmN,aAAa,CAACE,IAAI,EAAEJ,GAAG,CAAChB,UAAU,CAACjM,CAAC,CAAC,CACzC,CAAC,CAAA;AACD,IAAA,OAAOsN,GAAU,CAACF,cAAc,EAAEG,MAAM,CAAC,CAAA;GAC5C,CAAA;AACL,CAAA;AAEA,SAASA,MAAMA,CAAIzJ,CAAM,EAAEL,CAAM,EAAO;AACpC,EAAA,OAAO,CAAC,GAAGK,CAAC,EAAE,GAAGL,CAAC,CAAC,CAAA;AACvB;;AChBO,SAAS+J,OAAOA,CACnBR,QAAiB,EACjBC,GAAiB,EACG;AACpB,EAAA,IAAI,OAAOD,QAAQ,KAAK,SAAS,EAAE;AAC/B,IAAA,OAAOC,GAAG,CAACjC,OAAO,CAACgC,QAAQ,CAAC,CAAA;AAChC,GAAA;AACA,EAAA,OAAOC,GAAG,CAAChC,OAAO,CAAC,SAAS,EAAE+B,QAAQ,CAAC,CAAA;AAC3C;;ACNO,SAASS,QAAQA,CAAsBC,aAAgB,EAAa;AACvE,EAAA,OAAO,CAACV,QAAQ,EAAEC,GAAG,KAAK;IACtB,IAAID,QAAQ,KAAKU,aAAa,EAAE;AAC5B,MAAA,OAAOT,GAAG,CAAChC,OAAO,CAACV,MAAM,CAACnD,IAAI,CAACC,SAAS,CAACqG,aAAa,CAAC,CAAC,EAAEV,QAAQ,CAAC,CAAA;AACvE,KAAA;AACA,IAAA,OAAOC,GAAG,CAACjC,OAAO,CAAC0C,aAAa,CAAC,CAAA;GACpC,CAAA;AACL;;ACTO,SAASC,WAAWA,GAEN;AAAA,EAAA,KAAA,IAAAC,IAAA,GAAAzD,SAAA,CAAApL,MAAA,EADd8O,cAAc,GAAA/N,IAAAA,KAAA,CAAA8N,IAAA,GAAAE,IAAA,GAAA,CAAA,EAAAA,IAAA,GAAAF,IAAA,EAAAE,IAAA,EAAA,EAAA;AAAdD,IAAAA,cAAc,CAAAC,IAAA,CAAA3D,GAAAA,SAAA,CAAA2D,IAAA,CAAA,CAAA;AAAA,GAAA;AAEjB,EAAA,OAAO,CAACd,QAAQ,EAAEC,GAAG,KAAK;AACtB,IAAA,IAAI,OAAOD,QAAQ,KAAK,QAAQ,EAAE;AAC9B,MAAA,MAAMe,KAAK,GAAGF,cAAc,CAACG,OAAO,CAAChB,QAAQ,CAAC,CAAA;AAC9C,MAAA,IAAIe,KAAK,GAAG,CAAC,CAAC,EAAE;QACZ,OAAOd,GAAG,CAACjC,OAAO,CAAC6C,cAAc,CAACE,KAAK,CAAC,CAAC,CAAA;AAC7C,OAAA;AACJ,KAAA;AACA,IAAA,MAAMjC,QAAQ,GAAG+B,cAAc,CAACtM,GAAG,CAAErB,CAAC,IAAKkH,IAAI,CAACC,SAAS,CAACnH,CAAC,CAAC,CAAC,CAAA;AAC7D,IAAA,OAAO+M,GAAG,CAAChC,OAAO,CAACa,QAAQ,EAAEkB,QAAQ,CAAC,CAAA;GACzC,CAAA;AACL;;ACfO,SAASiB,QAAQA,CAACvO,CAAU,EAAmC;AAClE,EAAA,OAAOA,CAAC,IAAI,IAAI,IAAIwO,MAAM,CAACC,cAAc,CAACzO,CAAC,CAAC,KAAKwO,MAAM,CAACE,SAAS,CAAA;AACrE;;ACAO,SAASC,QAAQA,CAAIC,UAAqB,EAAoB;AACjE,EAAA,OAAO,CAACtB,QAAQ,EAAEC,GAAG,KAAK;IACtB,IAAID,QAAQ,KAAK,IAAI,EAAE;AACnB,MAAA,OAAOC,GAAG,CAACjC,OAAO,CAACgC,QAAQ,CAAC,CAAA;AAChC,KAAA;AACA,IAAA,OAAOsB,UAAU,CAACtB,QAAQ,EAAEC,GAAG,CAAC,CAAA;GACnC,CAAA;AACL;;ACPO,MAAMsB,MAAsB,GAAGA,CAACvB,QAAQ,EAAEC,GAAG,KAAK;AACrD,EAAA,IAAI,OAAOD,QAAQ,KAAK,QAAQ,EAAE;AAC9B,IAAA,OAAOC,GAAG,CAACjC,OAAO,CAACgC,QAAQ,CAAC,CAAA;AAChC,GAAA;AACA,EAAA,OAAOC,GAAG,CAAChC,OAAO,CAAC,QAAQ,EAAE+B,QAAQ,CAAC,CAAA;AAC1C,CAAC;;ACCM,SAASwB,MAAMA,CAClBC,MAAS,EACkC;AAC3C,EAAA,OAAO,CAACzB,QAAQ,EAAEC,GAAG,KAAK;AACtB,IAAA,IAAI,CAACgB,QAAQ,CAACjB,QAAQ,CAAC,EAAE;AACrB,MAAA,OAAOC,GAAG,CAAChC,OAAO,CAAC,QAAQ,EAAE+B,QAAQ,CAAC,CAAA;AAC1C,KAAA;AAEA,IAAA,MAAM0B,GAAQ,GAAG;MAAC,GAAG1B,QAAAA;KAAS,CAAA;IAC9B,MAAM2B,UAAsB,GAAG,EAAE,CAAA;AACjC,IAAA,KAAK,MAAM,CAACC,IAAI,EAAEC,UAAU,CAAC,IAAIX,MAAM,CAACY,OAAO,CAACL,MAAM,CAAC,EAAE;AACrD,MAAA,MAAMrD,MAAM,GAAGyD,UAAU,CAAC7B,QAAQ,CAAC4B,IAAI,CAAC,EAAE3B,GAAG,CAAChB,UAAU,CAAC2C,IAAI,CAAC,CAAC,CAAA;AAC/D,MAAA,IAAIvD,SAAS,CAACD,MAAM,CAAC,EAAE;QACnB,IAAIA,MAAM,CAACnC,KAAK,KAAKmB,SAAS,IAAIwE,IAAI,IAAI5B,QAAQ,EAAE;AAChD0B,UAAAA,GAAG,CAACE,IAAI,CAAC,GAAGxD,MAAM,CAACnC,KAAK,CAAA;AAC5B,SAAA;AACJ,OAAC,MAAM;AACH0F,QAAAA,UAAU,CAAC/N,IAAI,CAAC,GAAGwK,MAAM,CAACF,MAAM,CAAC,CAAA;AACrC,OAAA;AACJ,KAAA;AAEA,IAAA,IAAIyD,UAAU,CAAC5P,MAAM,GAAG,CAAC,EAAE;MACvB,OAAOkM,OAAO,CAAC0D,UAAU,CAAC,CAAA;AAC9B,KAAA;AACA,IAAA,OAAO1B,GAAG,CAACjC,OAAO,CAAC0D,GAAG,CAAC,CAAA;GAC1B,CAAA;AACL;;AChCO,SAASK,QAAQA,CAAIT,UAAqB,EAAyB;AACtE,EAAA,OAAO,CAACtB,QAAQ,EAAEC,GAAG,KAAK;IACtB,IAAID,QAAQ,KAAK5C,SAAS,EAAE;AACxB,MAAA,OAAO6C,GAAG,CAACjC,OAAO,CAACgC,QAAQ,CAAC,CAAA;AAChC,KAAA;AACA,IAAA,OAAOsB,UAAU,CAACtB,QAAQ,EAAEC,GAAG,CAAC,CAAA;GACnC,CAAA;AACL;;ACLO,SAAS+B,IAAIA,CAChBC,MAAiB,EACjBC,MAAiB,EACH;AACd,EAAA,OAAO,CAAClC,QAAQ,EAAEC,GAAG,KAAK;AACtB,IAAA,IAAI,CAACnN,KAAK,CAACC,OAAO,CAACiN,QAAQ,CAAC,EAAE;AAC1B,MAAA,OAAOC,GAAG,CAAChC,OAAO,CAAC,OAAO,EAAE+B,QAAQ,CAAC,CAAA;AACzC,KAAA;AACA,IAAA,IAAIA,QAAQ,CAACjO,MAAM,KAAK,CAAC,EAAE;AACvB,MAAA,OAAOkO,GAAG,CAAChC,OAAO,CAAC,mBAAmB,EAAE+B,QAAQ,CAAC,CAAA;AACrD,KAAA;AACA,IAAA,MAAM,CAACmC,IAAI,EAAEC,IAAI,CAAC,GAAGpC,QAAQ,CAAA;AAC7B,IAAA,MAAMqC,OAAO,GAAGJ,MAAM,CAACE,IAAI,EAAElC,GAAG,CAAChB,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;AAC/C,IAAA,IAAId,SAAS,CAACkE,OAAO,CAAC,EAAE;AACpB,MAAA,OAAOA,OAAO,CAAA;AAClB,KAAA;AACA,IAAA,MAAMC,OAAO,GAAGJ,MAAM,CAACE,IAAI,EAAEnC,GAAG,CAAChB,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;AAC/C,IAAA,IAAId,SAAS,CAACmE,OAAO,CAAC,EAAE;AACpB,MAAA,OAAOA,OAAO,CAAA;AAClB,KAAA;AAEA,IAAA,OAAOrC,GAAG,CAACjC,OAAO,CAAC,CAACqE,OAAO,CAACpG,KAAK,EAAEqG,OAAO,CAACrG,KAAK,CAAC,CAAC,CAAA;GACrD,CAAA;AACL;;AClBO,SAASsG,WAAWA,CAAIC,CAAY,EAAqB;AAC5D,EAAA,OAAO,IAAIC,cAAc,CAACD,CAAC,CAAC,CAAA;AAChC,CAAA;AAEO,MAAMC,cAAc,CAAI;EAC3B7D,WAAWA,CAAiBkB,MAAiB,EAAE;IAAA,IAAnBA,CAAAA,MAAiB,GAAjBA,MAAiB,CAAA;AAAG,GAAA;EAEhD4C,IAAIA,CAAIC,UAA+B,EAAqB;IACxD,OAAO,IAAIF,cAAc,CAAIG,cAAc,CAAC,IAAI,CAAC9C,MAAM,EAAE6C,UAAU,CAAC,CAAC,CAAA;AACzE,GAAA;AACJ,CAAA;AAEA,SAASC,cAAcA,CAGrBC,OAAU,EAAEC,OAAU,EAA0B;AAC9C,EAAA,OAAO,CAAC9C,QAAiB,EAAEC,GAAiB,KAAK;AAC7C,IAAA,MAAM8C,aAAa,GAAGF,OAAO,CAAC7C,QAAQ,EAAEC,GAAG,CAAC,CAAA;AAC5C,IAAA,IAAI9B,SAAS,CAAC4E,aAAa,CAAC,EAAE;AAC1B,MAAA,OAAOA,aAAa,CAAA;AACxB,KAAA;AAEA,IAAA,OAAOD,OAAO,CAACC,aAAa,CAAC9G,KAAK,EAAEgE,GAAG,CAAC,CAAA;GAC3C,CAAA;AACL;;AC3BO,SAAS+C,MAAMA,CAClBC,QAAmB,EACnB3B,UAAqB,EACD;AACpB,EAAA,OAAO,CAACtB,QAAQ,EAAEC,GAAG,KAAK;AACtB,IAAA,IAAI,CAACgB,QAAQ,CAACjB,QAAQ,CAAC,EAAE;AACrB,MAAA,OAAOC,GAAG,CAAChC,OAAO,CAAC,QAAQ,EAAE+B,QAAQ,CAAC,CAAA;AAC1C,KAAA;IAEA,MAAM5B,MAAM,GAAG,EAAkB,CAAA;IACjC,MAAMuD,UAAsB,GAAG,EAAE,CAAA;AACjC,IAAA,KAAK,MAAM,CAAC5F,GAAG,EAAEE,KAAK,CAAC,IAAIiF,MAAM,CAACY,OAAO,CAAC9B,QAAQ,CAAC,EAAE;AACjD,MAAA,MAAMkD,QAAQ,GAAGjD,GAAG,CAAChB,UAAU,CAAClD,GAAG,CAAC,CAAA;AACpC,MAAA,MAAMoH,SAAS,GAAGF,QAAQ,CAAClH,GAAG,EAAEmH,QAAQ,CAAC,CAAA;AACzC,MAAA,IAAI/E,SAAS,CAACgF,SAAS,CAAC,EAAE;AACtBxB,QAAAA,UAAU,CAAC/N,IAAI,CAAC,GAAGuP,SAAS,CAACjF,MAAM,CAAC,CAAA;AACxC,OAAA;AAEA,MAAA,MAAMkF,WAAW,GAAG9B,UAAU,CAACrF,KAAK,EAAEiH,QAAQ,CAAC,CAAA;AAC/C,MAAA,IAAI/E,SAAS,CAACiF,WAAW,CAAC,EAAE;AACxBzB,QAAAA,UAAU,CAAC/N,IAAI,CAAC,GAAGwP,WAAW,CAAClF,MAAM,CAAC,CAAA;AAC1C,OAAA;MAEA,IAAIG,SAAS,CAAC8E,SAAS,CAAC,IAAI9E,SAAS,CAAC+E,WAAW,CAAC,EAAE;QAChDhF,MAAM,CAAC+E,SAAS,CAAClH,KAAK,CAAC,GAAGmH,WAAW,CAACnH,KAAK,CAAA;AAC/C,OAAA;AACJ,KAAA;AAEA,IAAA,IAAI0F,UAAU,CAAC5P,MAAM,GAAG,CAAC,EAAE;MACvB,OAAOkM,OAAO,CAAC0D,UAAU,CAAC,CAAA;AAC9B,KAAA;AACA,IAAA,OAAO1B,GAAG,CAACjC,OAAO,CAACI,MAAM,CAAC,CAAA;GAC7B,CAAA;AACL;;ACrCO,MAAMiF,MAAsB,GAAGA,CAACrD,QAAQ,EAAEC,GAAG,KAAK;AACrD,EAAA,IAAI,OAAOD,QAAQ,KAAK,QAAQ,EAAE;AAC9B,IAAA,OAAOC,GAAG,CAACjC,OAAO,CAACgC,QAAQ,CAAC,CAAA;AAChC,GAAA;AACA,EAAA,OAAOC,GAAG,CAAChC,OAAO,CAAC,QAAQ,EAAE+B,QAAQ,CAAC,CAAA;AAC1C,CAAC;;ACHM,SAASsD,IAAIA,CAChBrB,MAAiB,EACjBC,MAAiB,EACjBqB,MAAiB,EACA;AACjB,EAAA,OAAO,CAACvD,QAAQ,EAAEC,GAAG,KAAK;AACtB,IAAA,IAAI,CAACnN,KAAK,CAACC,OAAO,CAACiN,QAAQ,CAAC,EAAE;AAC1B,MAAA,OAAOC,GAAG,CAAChC,OAAO,CAAC,OAAO,EAAE+B,QAAQ,CAAC,CAAA;AACzC,KAAA;AACA,IAAA,IAAIA,QAAQ,CAACjO,MAAM,KAAK,CAAC,EAAE;AACvB,MAAA,OAAOkO,GAAG,CAAChC,OAAO,CAAC,mBAAmB,EAAE+B,QAAQ,CAAC,CAAA;AACrD,KAAA;AAEA,IAAA,MAAMqC,OAAO,GAAGJ,MAAM,CAACjC,QAAQ,CAAC,CAAC,CAAC,EAAEC,GAAG,CAAChB,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;AACtD,IAAA,IAAId,SAAS,CAACkE,OAAO,CAAC,EAAE;AACpB,MAAA,OAAOA,OAAO,CAAA;AAClB,KAAA;AAEA,IAAA,MAAMC,OAAO,GAAGJ,MAAM,CAAClC,QAAQ,CAAC,CAAC,CAAC,EAAEC,GAAG,CAAChB,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;AACtD,IAAA,IAAId,SAAS,CAACmE,OAAO,CAAC,EAAE;AACpB,MAAA,OAAOA,OAAO,CAAA;AAClB,KAAA;AAEA,IAAA,MAAMkB,OAAO,GAAGD,MAAM,CAACvD,QAAQ,CAAC,CAAC,CAAC,EAAEC,GAAG,CAAChB,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;AACtD,IAAA,IAAId,SAAS,CAACqF,OAAO,CAAC,EAAE;AACpB,MAAA,OAAOA,OAAO,CAAA;AAClB,KAAA;AAEA,IAAA,OAAOvD,GAAG,CAACjC,OAAO,CAAC,CAACqE,OAAO,CAACpG,KAAK,EAAEqG,OAAO,CAACrG,KAAK,EAAEuH,OAAO,CAACvH,KAAK,CAAC,CAAC,CAAA;GACpE,CAAA;AACL;;AC9BO,SAASwH,KAAKA,CAAIC,WAAsB,EAAmB;AAC9D,EAAA,OAAO,IAAIC,YAAY,CAACD,WAAW,CAAC,CAAA;AACxC,CAAA;AAEO,MAAMC,YAAY,CAAI;EACzB/E,WAAWA,CAAQkB,MAAiB,EAAE;IAAA,IAAnBA,CAAAA,MAAiB,GAAjBA,MAAiB,CAAA;AAAG,GAAA;EAEvC8D,EAAEA,CAAMC,SAAsB,EAAE;IAC5B,OAAO,IAAIF,YAAY,CAAUG,MAAM,CAAC,IAAI,CAAChE,MAAM,EAAE+D,SAAS,CAAC,CAAC,CAAA;AACpE,GAAA;AACJ,CAAA;AAEA,SAASC,MAAMA,CAAO7B,MAAiB,EAAEC,MAAiB,EAAiB;AACvE,EAAA,OAAO,CAAClC,QAAQ,EAAEC,GAAG,KAAK;AACtB,IAAA,MAAMoC,OAAO,GAAGJ,MAAM,CAACjC,QAAQ,EAAEC,GAAG,CAAC,CAAA;AACrC,IAAA,IAAI5B,SAAS,CAACgE,OAAO,CAAC,EAAE;AACpB,MAAA,OAAOA,OAAO,CAAA;AAClB,KAAA;AAEA,IAAA,OAAOH,MAAM,CAAClC,QAAQ,EAAEC,GAAG,CAAC,CAAA;GAC/B,CAAA;AACL;;ACrBO,SAAS8D,SAASA,CACrBjE,MAAiB,EACjBkE,QAAqD,EAClC;AACnB,EAAA,OAAO,CAAChE,QAAQ,EAAEC,GAAG,KAAK;IACtB,IAAID,QAAQ,IAAI,IAAI,EAAE;AAClB,MAAA,OAAOhC,OAAO,CAACgG,QAAQ,CAAChE,QAAQ,CAAC,CAAC,CAAA;AACtC,KAAA;AACA,IAAA,OAAOF,MAAM,CAACE,QAAQ,EAAEC,GAAG,CAAC,CAAA;GAC/B,CAAA;AACL;;ACRO,MAAMgE,WAAwD,GACjEF,SAAS,CACLf,MAAM,CACFK,MAAM,EACN7B,MAAM,CAAC;AACH0C,EAAAA,KAAK,EAAE3C,MAAM;AACb4C,EAAAA,MAAM,EAAE5C,MAAAA;AACZ,CAAC,CACL,CAAC,EACD,OAAO,EAAE,CACb,CAAC;;ACJE,SAAS6C,WAAWA,CACvBC,SAAuB,EACvBC,YAA6B,EACO;AACpC,EAAA,OAAO9C,MAAM,CAAC;AACV1N,IAAAA,IAAI,EAAEuQ,SAAS;AACfhI,IAAAA,MAAM,EAAE0F,QAAQ,CAACvB,OAAO,CAAC;AACzB9E,IAAAA,MAAM,EAAEqG,QAAQ,CAACvB,OAAO,CAAC;AACzB/E,IAAAA,SAAS,EAAEsG,QAAQ,CAACsB,MAAM,CAAC;AAC3B1H,IAAAA,OAAO,EAAE2I,YAAY;AACrBvI,IAAAA,GAAG,EAAEgG,QAAQ,CAACV,QAAQ,CAACE,MAAM,CAAC,CAAC;AAC/B/E,IAAAA,OAAO,EAAEuF,QAAQ,CACbP,MAAM,CAAC;AACHpG,MAAAA,KAAK,EAAEmG,MAAM;AACblG,MAAAA,KAAK,EAAEkG,MAAAA;AACX,KAAC,CACL,CAAA;AACJ,GAAC,CAAC,CAAA;AACN,CAAA;AAEO,SAASgD,sBAAsBA,CAKlCC,YAA6B,EAC7BH,SAAuB,EACvBC,YAA6B,EACO;AACpC,EAAA,OAAO9C,MAAM,CAAC;AACV1N,IAAAA,IAAI,EAAEuQ,SAAS;AACfhI,IAAAA,MAAM,EAAE0F,QAAQ,CAACvB,OAAO,CAAC;AACzB9E,IAAAA,MAAM,EAAEqG,QAAQ,CAACvB,OAAO,CAAC;AACzB/E,IAAAA,SAAS,EAAEsG,QAAQ,CAACsB,MAAM,CAAC;AAC3B1H,IAAAA,OAAO,EAAE2I,YAAY;AACrBvI,IAAAA,GAAG,EAAEgG,QAAQ,CAACR,MAAM,CAAC;AACrB/E,IAAAA,OAAO,EAAEgI,YAAAA;AACb,GAAC,CAAC,CAAA;AACN;;AClCO,MAAMC,sBAAiD,GAAGL,WAAW,CACxE3D,QAAQ,CAAC,aAAa,CAAC,EACvBe,MAAM,CAAC;AACH/B,EAAAA,KAAK,EAAES,KAAK,CAACmD,MAAM,CAAC;AACpBqB,EAAAA,UAAU,EAAExE,KAAK,CAACmD,MAAM,CAAC;AACzBsB,EAAAA,cAAc,EAAEZ,SAAS,CAACvD,OAAO,EAAE,MAAM,KAAK,CAAC;AAC/CnE,EAAAA,MAAM,EAAE0H,SAAS,CAACvD,OAAO,EAAE,MAAM,KAAK,CAAC;EACvChC,MAAM,EAAE0B,KAAK,CAAC6D,SAAS,CAACxC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AACzCqD,EAAAA,aAAa,EAAE7C,QAAQ,CAACvB,OAAO,CAAC;AAChCqE,EAAAA,aAAa,EAAE9C,QAAQ,CACnBP,MAAM,CAAC;AACHsD,IAAAA,WAAW,EAAEzB,MAAM;AACnB0B,IAAAA,KAAK,EAAE7E,KAAK,CAACmD,MAAM,CAAC;IACpB2B,KAAK,EAAE9E,KAAK,CAACmD,MAAM,CAAA;AACvB,GAAC,CACL,CAAA;AACJ,CAAC,CACL,CAAC;;ACjBM,MAAM4B,oBAA6C,GAAGb,WAAW,CACpE3D,QAAQ,CAAC,YAAY,CAAC,EACtBe,MAAM,CAAC;AACH0D,EAAAA,SAAS,EAAE7B,MAAM;AACjB8B,EAAAA,WAAW,EAAEpF,GAAG;AAChBqF,EAAAA,QAAQ,EAAElF,KAAK,CAACsB,MAAM,CAAC;AAAC6D,IAAAA,IAAI,EAAEhC,MAAM;AAAEpH,IAAAA,KAAK,EAAEoH,MAAAA;AAAM,GAAC,CAAC,CAAC;AACtDiC,EAAAA,UAAU,EAAE9E,OAAO;AACnB+E,EAAAA,WAAW,EAAE/E,OAAO;AACpB2D,EAAAA,MAAM,EAAE5C,MAAM;AACdlF,EAAAA,MAAM,EAAE0H,SAAS,CAACvD,OAAO,EAAE,MAAM,KAAK,CAAA;AAC1C,CAAC,CACL,CAAC;;ACnBM,MAAMgF,qBAA+C,GAAGpB,WAAW,CACtE3D,QAAQ,CAAC,YAAY,CAAC,EACtBe,MAAM,CAAC;AACHiE,EAAAA,YAAY,EAAEpC,MAAM;AACpBqC,EAAAA,UAAU,EAAErC,MAAM;AAClBhH,EAAAA,MAAM,EAAE0H,SAAS,CAACvD,OAAO,EAAE,MAAM,KAAK,CAAA;AAC1C,CAAC,CACL,CAAC;;ACAM,MAAMmF,mBAA2C,GAAGvB,WAAW,CAClE3D,QAAQ,CAAC,UAAU,CAAC,EACpBe,MAAM,CAAC;AACHoE,EAAAA,WAAW,EAAE7B,SAAS,CAACV,MAAM,EAAE,MAAM,EAAE,CAAC;AACxCnH,EAAAA,SAAS,EAAE6F,QAAQ,CAACsB,MAAM,CAAC;AAC3B9G,EAAAA,YAAY,EAAEwF,QAAQ,CAACsB,MAAM,CAAC;AAC9BhH,EAAAA,MAAM,EAAE0H,SAAS,CAACvD,OAAO,EAAE,MAAM,KAAK,CAAC;AACvCqF,EAAAA,OAAO,EAAE3F,KAAK,CACVsB,MAAM,CAAC;AACHhO,IAAAA,OAAO,EAAE6P,MAAM;AACfyC,IAAAA,OAAO,EAAEtF,OAAAA;AACb,GAAC,CACL,CAAA;AACJ,CAAC,CACL,CAAC;;ACpBM,MAAMuF,sBAAiD,GAAG3B,WAAW,CACxE3D,QAAQ,CAAC,aAAa,CAAC,EACvBe,MAAM,CAAC;AACHwE,EAAAA,UAAU,EAAE3C,MAAM;AAClB4C,EAAAA,UAAU,EAAE5C,MAAM;AAClB6C,EAAAA,WAAW,EAAE7C,MAAM;AACnB;AACA;AACA;AACA5P,EAAAA,OAAO,EAAEsQ,SAAS,CACd,CAACoC,MAAM,EAAElG,GAAG,KAAKmG,eAAe,CAACD,MAAM,EAAElG,GAAG,CAAC,EAC7C,OAAO,EAAE,CACb,CAAC;AACD5D,EAAAA,MAAM,EAAE0H,SAAS,CAACvD,OAAO,EAAE,MAAM,KAAK,CAAA;AAC1C,CAAC,CACL,CAAC;;ACtBD;AACA;AACO,SAAS6F,OAAOA,CAAOC,CAAkB,EAAuB;AACnE,EAAA,OAAO,CAACtG,QAAQ,EAAEC,GAAG,KAAKA,GAAG,CAACjC,OAAO,CAACsI,CAAC,CAACtG,QAAQ,CAAC,CAAC,CAAA;AACtD;;ACHO,MAAMuG,oBAAoB,GAAG5F,WAAW,CAC3C,OAAO,EACP,WAAW,EACX,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,oBAAoB,EACpB,YACJ,CAAC,CAAA;AAEM,MAAM6F,qBAAqB,GAAGzC,SAAS,CAC1C7D,KAAK,CAACqG,oBAAoB,CAAC;AAC3B;AACA;AACA;AACA,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,CACtD,CAAC;;ACHD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASE,sBAAsBA,CAClCC,kBAA0B,EAC1BC,WAA2B,EACwB;EACnD,OAAO,IAAIC,mCAAmC,CAC1CF,kBAAkB,EAClBC,WAAW,EACVE,MAAM,IAAKA,MAAM,EAClB,CAACC,GAAG,EAAE7G,GAAG,KACLA,GAAG,CAAChC,OAAO,CAAC,4CAA4C,EAAE6I,GAAG,CACrE,CAAC,CAAA;AACL,CAAA;AAEA,MAAMF,mCAAmC,CAKvC;EACS9G,MAAM,CAAA;EAEblB,WAAWA,CACPmI,YAAoB,EACpBC,gBAAiD,EACzCC,eAAuD,EACvDC,kBAAkC,EAC5C;IAAA,IAFUD,CAAAA,eAAuD,GAAvDA,eAAuD,CAAA;IAAA,IACvDC,CAAAA,kBAAkC,GAAlCA,kBAAkC,CAAA;AAE1C,IAAA,MAAMC,kCAAkC,GAAG5E,WAAW,CAClDyE,gBACJ,CAAC,CAACtE,IAAI,CAAC2D,OAAO,CAAC,IAAI,CAACY,eAAe,CAAC,CAAC,CAACnH,MAAM,CAAA;AAE5C,IAAA,IAAI,CAACA,MAAM,GAAG,CAACgH,GAAY,EAAE7G,GAAiB,KAAK;AAC/C,MAAA,IAAI,CAACgB,QAAQ,CAAC6F,GAAG,CAAC,EAAE;AAChB,QAAA,OAAO7G,GAAG,CAAChC,OAAO,CAAC,QAAQ,EAAE6I,GAAG,CAAC,CAAA;AACrC,OAAA;AAEA,MAAA,MAAMM,kBAAkB,GAAGC,oBAAoB,CAACP,GAAG,EAAE7G,GAAG,CAAC,CAAA;AACzD,MAAA,IAAI9B,SAAS,CAACiJ,kBAAkB,CAAC,EAAE;AAC/B,QAAA,OAAOA,kBAAkB,CAAA;AAC7B,OAAA;MAEA,IAAIA,kBAAkB,CAACnL,KAAK,CAACO,OAAO,CAACpB,KAAK,KAAK2L,YAAY,EAAE;AACzD,QAAA,OAAO,IAAI,CAACG,kBAAkB,CAACJ,GAAG,EAAE7G,GAAG,CAAC,CAAA;AAC5C,OAAA;AAEA,MAAA,OAAOkH,kCAAkC,CAACL,GAAG,EAAE7G,GAAG,CAAC,CAAA;KACtD,CAAA;AACL,GAAA;;AAEA;AACJ;AACA;AACIqH,EAAAA,iBAAiBA,CACbP,YAAoB,EACpBQ,eAA4B,EAC5BC,oBAA2D,EACX;AAChD,IAAA,MAAMN,kBAAkB,GAAG,IAAI,CAACpH,MAAM,CAAA;AAEtC,IAAA,MAAMmH,eAAe,GAAIQ,GAAQ,IAC7B,IAAI,CAACR,eAAe,CAACO,oBAAoB,CAACC,GAAG,CAAC,CAAC,CAAA;IAEnD,OAAO,IAAIb,mCAAmC,CAC1CG,YAAY,EACZQ,eAAe,EACfN,eAAe,EACfC,kBACJ,CAAC,CAAA;AACL,GAAA;AACJ,CAAA;AAEA,MAAMG,oBAAoB,GAAG7F,MAAM,CAAC;AAChChF,EAAAA,OAAO,EAAEuH,SAAS,CAACvC,MAAM,CAAC;AAACpG,IAAAA,KAAK,EAAEmG,MAAM;AAAElG,IAAAA,KAAK,EAAEkG,MAAAA;GAAO,CAAC,EAAE,OAAO;AAC9DnG,IAAAA,KAAK,EAAE,CAAC;AACRC,IAAAA,KAAK,EAAE,CAAA;AACX,GAAC,CAAC,CAAA;AACN,CAAC,CAAC;;ACvFF,MAAMqM,+BAA+B,GAAGjE,KAAK,CAACJ,MAAM,CAAC,CAChDO,EAAE,CAACrC,MAAM,CAAC,CACVqC,EAAE,CAACnD,QAAQ,CAAC,IAAI,CAAC,CAAC,CAClBmD,EAAE,CAACnD,QAAQ,CAACrD,SAAS,CAAC,CAAC,CAAC0C,MAAM,CAAA;AAEnC,MAAM6H,8BAA8B,GAAGnG,MAAM,CAAC;AAC1C;AACA;AACA;AACAvF,EAAAA,KAAK,EAAE8F,QAAQ,CAACsB,MAAM,CAAC;AACvBvH,EAAAA,IAAI,EAAEiI,SAAS,CAACvD,OAAO,EAAE,MAAM,KAAK,CAAC;AACrCxE,EAAAA,QAAQ,EAAE+H,SAAS,CAACvD,OAAO,EAAE,MAAM,KAAK,CAAC;EACzC3E,UAAU,EAAE8E,WAAW,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,CAAC;AACvD5E,EAAAA,GAAG,EAAEwG,WAAW,CAACmF,+BAA+B,CAAC,CAAChF,IAAI,CAAC2D,OAAO,CAAC9I,MAAM,CAAC,CAAC,CAClEuC,MAAAA;AACT,CAAC,CAAC,CAAA;AAEF,SAAS8H,wBAAwBA,CAC7BC,eAA0E,EAC7C;EAC7B,MAAMC,KAAoC,GAAG,EAAE,CAAA;AAC/C,EAAA,KAAK,MAAMC,UAAU,IAAIF,eAAe,EAAE;IACtC,MAAM;AAAC5L,MAAAA,KAAAA;AAAK,KAAC,GAAG8L,UAAU,CAAA;IAC1B,IAAI9L,KAAK,IAAI,IAAI,EAAE;AACf;MACA6L,KAAK,CAAClU,IAAI,CAAC;AAAC,QAAA,GAAGmU,UAAU;AAAE9L,QAAAA,KAAAA;AAAK,OAAC,CAAC,CAAA;AACtC,KAAA;AACJ,GAAA;AACA,EAAA,OAAO6L,KAAK,CAAA;AAChB,CAAA;AAEA,MAAME,QAAQ,GAAGxG,MAAM,CAAC;AAACpG,EAAAA,KAAK,EAAEqF,QAAQ,CAAC,CAAC,CAAC;AAAEpF,EAAAA,KAAK,EAAEkG,MAAAA;AAAM,CAAC,CAAC,CAAA;AAC5D,MAAM0G,uBAAiD,GACnD1D,sBAAsB,CAClByD,QAAQ,EACRvH,QAAQ,CAAC,YAAY,CAAC,EACtBe,MAAM,CAAC;AACH5F,EAAAA,WAAW,EAAE2G,WAAW,CACpBrC,KAAK,CAACyH,8BAA8B,CACxC,CAAC,CAACjF,IAAI,CAAC2D,OAAO,CAACuB,wBAAwB,CAAC,CAAC,CAAC9H,MAAM;AAChD1D,EAAAA,SAAS,EAAE8D,KAAK,CAACmD,MAAM,CAAC;AACxB/G,EAAAA,KAAK,EAAEkE,OAAO;AACdjE,EAAAA,YAAY,EAAEwF,QAAQ,CAACsB,MAAM,CAAC;AAC9BnH,EAAAA,SAAS,EAAE6F,QAAQ,CAACsB,MAAM,CAAC;AAC3BlH,EAAAA,UAAU,EAAEqK,qBAAqB;EACjC0B,cAAc,EAAEnG,QAAQ,CAACpB,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,CAAA;AACtE,CAAC,CACL,CAAC,CAAA;AAEL,MAAMwH,QAAQ,GAAGpG,QAAQ,CAACP,MAAM,CAAC;AAACpG,EAAAA,KAAK,EAAEqF,QAAQ,CAAC,CAAC,CAAC;AAAEpF,EAAAA,KAAK,EAAEkG,MAAAA;AAAM,CAAC,CAAC,CAAC,CAAA;AACtE,MAAM6G,uBAAuB,GAAG7D,sBAAsB,CAClD4D,QAAQ,EACR1H,QAAQ,CAAC,YAAY,CAAC,EACtBe,MAAM,CAAC;AACHpF,EAAAA,SAAS,EAAE8D,KAAK,CAACmD,MAAM,CAAC;AACxB/G,EAAAA,KAAK,EAAEkE,OAAO;AACdjE,EAAAA,YAAY,EAAEwF,QAAQ,CAACsB,MAAM,CAAC;AAC9BnH,EAAAA,SAAS,EAAE6F,QAAQ,CAACsB,MAAM,CAAC;AAC3BvH,EAAAA,IAAI,EAAE0E,OAAO;AACbxE,EAAAA,QAAQ,EAAEwE,OAAO;AACjBvE,EAAAA,KAAK,EAAEoH,MAAM;AACblH,EAAAA,UAAU,EAAEqK,qBAAqB;EACjC0B,cAAc,EAAEnG,QAAQ,CAACpB,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,CAAA;AACtE,CAAC,CACL,CAAC,CAAA;AAED,SAAS0H,aAAaA,CAClBjU,MAAmD,EACnC;EAChB,MAAM;AAACuH,IAAAA,OAAAA;AAAO,GAAC,GAAGvH,MAAM,CAAA;EACxB,OAAO;AACH,IAAA,GAAGA,MAAM;AACToI,IAAAA,OAAO,EAAE;AAACpB,MAAAA,KAAK,EAAE,CAAC;AAAEC,MAAAA,KAAK,EAAE,CAAA;KAAE;AAC7BM,IAAAA,OAAO,EAAE;MACLW,KAAK,EAAEX,OAAO,CAACW,KAAK;MACpBH,UAAU,EAAER,OAAO,CAACQ,UAAU;MAC9BC,SAAS,EAAET,OAAO,CAACS,SAAS;MAC5B8L,cAAc,EAAEvM,OAAO,CAACuM,cAAc;MACtC3L,YAAY,EAAEZ,OAAO,CAACY,YAAY;MAClCL,SAAS,EAAEP,OAAO,CAACO,SAAS;AAE5BN,MAAAA,WAAW,EAAE,CACT;AACIC,QAAAA,UAAU,EAAE,SAAS;QACrBC,IAAI,EAAEH,OAAO,CAACG,IAAI;QAClBE,QAAQ,EAAEL,OAAO,CAACK,QAAQ;QAC1BC,KAAK,EAAEN,OAAO,CAACM,KAAAA;OAClB,CAAA;AAET,KAAA;GACH,CAAA;AACL,CAAA;AAEO,MAAMqM,qBAA+C,GACxD7B,sBAAsB,CAAC,CAAC,EAAEwB,uBAAuB,CAAC,CAACX,iBAAiB,CAChE,CAAC,EACDc,uBAAuB,EACvBC,aACJ,CAAC,CAACvI,MAAM;;ACrGZ,MAAMyI,WAAW,GAAGhG,WAAW,CAAC9B,QAAQ,CAAC,KAAK,CAAC,CAAC,CAACiC,IAAI,CACjD2D,OAAO,CAAC,MAAM,IAAI,CACtB,CAAC,CAACvG,MAAM,CAAA;AACD,MAAM0I,6BAA6B,GAAGhH,MAAM,CAAC;AAChDiH,EAAAA,KAAK,EAAE1E,SAAS,CAACV,MAAM,EAAE,MAAM,EAAE,CAAC;AAClCqF,EAAAA,OAAO,EAAE3G,QAAQ,CAACV,QAAQ,CAACb,OAAO,CAAC,CAAC;AACpC;AACA;AACA;AACAmI,EAAAA,IAAI,EAAElF,KAAK,CAAC8E,WAAW,CAAC,CACnB3E,EAAE,CAACnD,QAAQ,CAAC,IAAI,CAAC,CAAC,CAClBmD,EAAE,CAACnD,QAAQ,CAACrD,SAAS,CAAC,CAAC,CACvBwG,EAAE,CAAC,CAACuC,MAAM,EAAElG,GAAG,KAAK2I,oBAAoB,CAACzC,MAAM,EAAElG,GAAG,CAAC,CAAC,CAACH,MAAM;AAClEtM,EAAAA,OAAO,EAAE6P,MAAM;AACf;AACA;AACA;EACA5P,OAAO,EAAEA,CAAC0S,MAAM,EAAElG,GAAG,KAAKmG,eAAe,CAACD,MAAM,EAAElG,GAAG,CAAC;AACtD4I,EAAAA,aAAa,EAAE9G,QAAQ,CAACV,QAAQ,CAACb,OAAO,CAAC,CAAC;AAC1CsI,EAAAA,gBAAgB,EAAE/G,QAAQ,CAACV,QAAQ,CAACb,OAAO,CAAC,CAAC;AAC7CjF,EAAAA,MAAM,EAAEyH,MAAM,CACVK,MAAM,EACN7B,MAAM,CAAC;AACH0C,IAAAA,KAAK,EAAE3C,MAAM;AACb4C,IAAAA,MAAM,EAAE5C,MAAAA;AACZ,GAAC,CACL,CAAA;AACJ,CAAC,CAAC,CAAA;AAEK,MAAMwH,sBAAiD,GAAG3E,WAAW,CACxE3D,QAAQ,CAAC,cAAc,CAAC,EACxB+H,6BACJ,CAAC;;AC9CM,MAAMQ,yBAAuD,GAChE5E,WAAW,CACP3D,QAAQ,CAAC,kBAAkB,CAAC,EAC5Be,MAAM,CAAC;EAACyH,YAAY,EAAE/I,KAAK,CAACsI,6BAA6B,CAAA;AAAC,CAAC,CAC/D,CAAC;;ACNL;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASU,oBAAoBA,CAAoBC,eAAmB,EAAE;AACzE,EAAA,MAAMC,cAA6B,GAAGA,CAACtC,GAAY,EAAE7G,GAAiB,KAAK;AACvE,IAAA,IAAI,CAACgB,QAAQ,CAAC6F,GAAG,CAAC,EAAE;AAChB,MAAA,OAAO7G,GAAG,CAAChC,OAAO,CAAC,QAAQ,EAAE6I,GAAG,CAAC,CAAA;AACrC,KAAA;AACA,IAAA,OAAO7G,GAAG,CACLhB,UAAU,CAACkK,eAAe,CAAC,CAC3BlL,OAAO,CAAC,eAAe,EAAE6I,GAAG,CAACqC,eAAe,CAAC,CAAC,CAAA;GACtD,CAAA;AAED,EAAA,OAAO,IAAIE,yBAAyB,CAACF,eAAe,EAAEC,cAAc,CAAC,CAAA;AACzE,CAAA;AAEA,MAAMC,yBAAyB,CAG7B;AACEzK,EAAAA,WAAWA,CACCuK,eAAmB,EACpBrJ,MAAqB,EAC9B;IAAA,IAFUqJ,CAAAA,eAAmB,GAAnBA,eAAmB,CAAA;IAAA,IACpBrJ,CAAAA,MAAqB,GAArBA,MAAqB,CAAA;AAC7B,GAAA;AAEHwJ,EAAAA,UAAUA,CACNC,iBAA4B,EAC5BC,eAAgC,EACc;AAC9C,IAAA,MAAMC,cAAc,GAAGC,wBAAwB,CAC3C,IAAI,CAACP,eAAe,EACpBI,iBAAiB,EACjBC,eAAe,EACf,IAAI,CAAC1J,MACT,CAAC,CAAA;IAED,OAAO,IAAIuJ,yBAAyB,CAChC,IAAI,CAACF,eAAe,EACpBM,cACJ,CAAC,CAAA;AACL,GAAA;AACJ,CAAA;AAEA,SAASC,wBAAwBA,CAM7BP,eAAmB,EACnBI,iBAAqB,EACrBI,YAA6B,EAC7BC,kBAAgC,EACV;AACtB,EAAA,OAAO,CAAC9C,GAAY,EAAE7G,GAAiB,KAAK;AACxC,IAAA,IAAI,CAACgB,QAAQ,CAAC6F,GAAG,CAAC,EAAE;AAChB,MAAA,OAAO7G,GAAG,CAAChC,OAAO,CAAC,QAAQ,EAAE6I,GAAG,CAAC,CAAA;AACrC,KAAA;AAEA,IAAA,IAAIA,GAAG,CAACqC,eAAe,CAAC,KAAKI,iBAAiB,EAAE;AAC5C,MAAA,OAAOI,YAAY,CAAC7C,GAAG,EAAE7G,GAAG,CAAC,CAAA;AACjC,KAAA;AAEA,IAAA,OAAO2J,kBAAkB,CAAC9C,GAAG,EAAE7G,GAAG,CAAC,CAAA;GACtC,CAAA;AACL;;ACvDA,MAAM4J,eAAa,GAAG7H,IAAI,CAACT,MAAM,EAAEA,MAAM,CAAC,CAAA;AAE1C,MAAMuI,YAAY,GAAG9H,IAAI,CAAC6H,eAAa,EAAEA,eAAa,CAAC,CAAA;AAEhD,MAAME,kBAAyC,GAAG3F,WAAW,CAChE3D,QAAQ,CAAC,SAAS,CAAC,EACnBe,MAAM,CAAC;AACHwI,EAAAA,cAAc,EAAE9J,KAAK,CACjBS,WAAW,CACP,gBAAgB,EAChB,aAAa,EACb,QAAQ,EACR,WAAW,EACX,WAAW,EACX,UAAU,EACV,SACJ,CACJ,CAAC;EACDmF,OAAO,EAAEoD,oBAAoB,CAAC,MAAM,CAAC,CAChCI,UAAU,CACP,gBAAgB,EAChB9H,MAAM,CAAC;AACH1N,IAAAA,IAAI,EAAE2M,QAAQ,CAAC,gBAAgB,CAAC;IAChCtK,MAAM,EAAEkL,QAAQ,CAACyI,YAAY,CAAA;GAChC,CACL,CAAC,CACAR,UAAU,CACP,aAAa,EACb9H,MAAM,CAAC;AACH1N,IAAAA,IAAI,EAAE2M,QAAQ,CAAC,aAAa,CAAC;AAC7B/I,IAAAA,SAAS,EAAEoS,YAAY;IACvB3T,MAAM,EAAEkL,QAAQ,CAACyI,YAAY,CAAA;GAChC,CACL,CAAC,CACAR,UAAU,CACP,QAAQ,EACR9H,MAAM,CAAC;AACH1N,IAAAA,IAAI,EAAE2M,QAAQ,CAAC,QAAQ,CAAC;IACxBtK,MAAM,EAAEkL,QAAQ,CAACyI,YAAY,CAAA;GAChC,CACL,CAAC,CACAR,UAAU,CACP,WAAW,EACX9H,MAAM,CAAC;AACH1N,IAAAA,IAAI,EAAE2M,QAAQ,CAAC,WAAW,CAAC;AAC3B/I,IAAAA,SAAS,EAAEoS,YAAY;IACvB3T,MAAM,EAAEkL,QAAQ,CAACyI,YAAY,CAAA;GAChC,CACL,CAAC,CACAR,UAAU,CACP,WAAW,EACX9H,MAAM,CAAC;AACH1N,IAAAA,IAAI,EAAE2M,QAAQ,CAAC,WAAW,CAAC;IAC3BtK,MAAM,EAAEkL,QAAQ,CAACyI,YAAY,CAAA;GAChC,CACL,CAAC,CACAR,UAAU,CACP,UAAU,EACV9H,MAAM,CAAC;AACH1N,IAAAA,IAAI,EAAE2M,QAAQ,CAAC,UAAU,CAAC;IAC1BtK,MAAM,EAAEkL,QAAQ,CAACyI,YAAY,CAAA;GAChC,CACL,CAAC,CACAR,UAAU,CACP,SAAS,EACT9H,MAAM,CAAC;AACH1N,IAAAA,IAAI,EAAE2M,QAAQ,CAAC,SAAS,CAAC;IACzBtK,MAAM,EAAEkL,QAAQ,CAACyI,YAAY,CAAA;GAChC,CACL,CAAC,CAAChK,MAAM;EACZnI,KAAK,EAAE6J,MAAM,CAAC;IACVyI,eAAe,EAAEzI,MAAM,CAAC;AACpB0I,MAAAA,MAAM,EAAEnI,QAAQ,CAACR,MAAM,CAAC;AACxB4C,MAAAA,MAAM,EAAEpC,QAAQ,CAACR,MAAM,CAAC;AACxB4I,MAAAA,IAAI,EAAEpI,QAAQ,CAACR,MAAM,CAAC;AACtB6I,MAAAA,KAAK,EAAErI,QAAQ,CAACR,MAAM,CAAC;AACvBvL,MAAAA,GAAG,EAAE+L,QAAQ,CAACV,QAAQ,CAACgC,MAAM,CAAC,CAAC;MAC/Ba,KAAK,EAAEnC,QAAQ,CAACR,MAAM,CAAA;AAC1B,KAAC,CAAC;AACF8I,IAAAA,GAAG,EAAEtI,QAAQ,CAAC8H,eAAa,CAAC;AAC5BS,IAAAA,gBAAgB,EAAEvI,QAAQ,CACtB7B,KAAK,CAACS,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAC1D,CAAC;AACD4J,IAAAA,QAAQ,EAAExI,QAAQ,CAAC8H,eAAa,CAAC;AACjCW,IAAAA,MAAM,EAAExI,IAAI,CAACqB,MAAM,EAAEA,MAAM,CAAC;IAC5BoH,QAAQ,EAAE9J,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC;AAC9C+J,IAAAA,KAAK,EAAE1I,IAAI,CAAC6H,eAAa,EAAEA,eAAa,CAAC;AACzCc,IAAAA,UAAU,EAAElK,QAAQ,CAAC,EAAE,CAAC;AACxBmK,IAAAA,UAAU,EAAErJ,MAAM;AAClBsJ,IAAAA,cAAc,EAAE9I,QAAQ,CAACvB,OAAO,CAAC;AACjCsK,IAAAA,SAAS,EAAE/I,QAAQ,CAACvB,OAAO,CAAC;AAC5BuK,IAAAA,YAAY,EAAEhJ,QAAQ,CAACvB,OAAO,CAAC;AAC/BrI,IAAAA,QAAQ,EAAE4J,QAAQ,CAAC8H,eAAa,CAAC;AACjCmB,IAAAA,IAAI,EAAEnB,eAAa;AACnB/B,IAAAA,KAAK,EAAE/F,QAAQ,CAAC0B,KAAK,CAACjD,OAAO,CAAC,CAACoD,EAAE,CAACP,MAAM,CAAC,CAACvD,MAAM,CAAA;GACnD,CAAA;AACL,CAAC,CACL,CAAC;;AC7GM,MAAMmL,gBAAqC,GAAG7G,WAAW,CAC5D3D,QAAQ,CAAC,OAAO,CAAC;AACjB;AACA;AACA;AACA,CAAC0F,MAAM,EAAElG,GAAG,KAAK2I,oBAAoB,CAACzC,MAAM,EAAElG,GAAG,CACrD,CAAC;;ACGM,MAAMiL,iBAAuC,GAAG9G,WAAW,CAC9D3D,QAAQ,CAAC,QAAQ,CAAC,EAClBe,MAAM,CAAC;AACHxL,EAAAA,GAAG,EAAEqN,MAAM;AACX+B,EAAAA,QAAQ,EAAErD,QAAQ,CAAC7B,KAAK,CAACsB,MAAM,CAAC;AAAC6D,IAAAA,IAAI,EAAEhC,MAAM;AAAEpH,IAAAA,KAAK,EAAEoH,MAAAA;GAAO,CAAC,CAAC,CAAC;EAChEa,KAAK,EAAET,KAAK,CAAClC,MAAM,CAAC,CAACqC,EAAE,CAACP,MAAM,CAAC,CAACvD,MAAM;EACtCqE,MAAM,EAAEV,KAAK,CAAClC,MAAM,CAAC,CAACqC,EAAE,CAACP,MAAM,CAAC,CAACvD,MAAM;AACvCqL,EAAAA,eAAe,EAAEpH,SAAS,CAACvD,OAAO,EAAE,MAAM,KAAK,CAAC;AAChD4K,EAAAA,kBAAkB,EAAErJ,QAAQ,CAACvB,OAAO,CAAC;AACrCnE,EAAAA,MAAM,EAAE0H,SAAS,CAACvD,OAAO,EAAE,MAAM,KAAK,CAAA;AAC1C,CAAC,CACL,CAAC;;AC1BM,MAAM6K,cAAsD,GAAGA,CAClErL,QAAQ,EACRC,GAAG,KACF;AACD,EAAA,IAAI,OAAOD,QAAQ,KAAK,QAAQ,EAAE;AAC9B,IAAA,OAAOC,GAAG,CAACjC,OAAO,CAACgC,QAAQ,CAAC,CAAA;AAChC,GAAA;EAEA,MAAMsL,YAAY,GAAG,CAACtL,QAAQ,CAAA;EAC9B,IAAIA,QAAQ,KAAK,EAAE,IAAIuL,KAAK,CAACD,YAAY,CAAC,EAAE;AACxC,IAAA,OAAOrL,GAAG,CAAChC,OAAO,CAAC,4BAA4B,EAAE+B,QAAQ,CAAC,CAAA;AAC9D,GAAA;AAEA,EAAA,OAAOC,GAAG,CAACjC,OAAO,CAACsN,YAAY,CAAC,CAAA;AACpC,CAAC;;ACAD,SAASE,WAAWA,CAAC9Y,CAAkB,EAAmB;AACtD,EAAA,OAAOA,CAAC,KAAK,EAAE,GAAG,CAAC,GAAGA,CAAC,CAAA;AAC3B,CAAA;AAEA,MAAM+Y,sBAAsB,GAAGlJ,WAAW,CAACkB,KAAK,CAAClC,MAAM,CAAC,CAACqC,EAAE,CAACP,MAAM,CAAC,CAACvD,MAAM,CAAA;AACtE;AACA;AACA;AAAA,CACC4C,IAAI,CAAC2D,OAAO,CAACmF,WAAW,CAAC,CAAC,CAC1B9I,IAAI,CAAC2I,cAAc,CAAC,CAACvL,MAAM,CAAA;AAEhC,MAAM4L,oBAAoB,GAAG3H,SAAS,CAAC0H,sBAAsB,EAAE,MAAMrO,SAAS,CAAC,CAAA;AAExE,MAAMuO,2BAA2D,GACpEnK,MAAM,CAAC;AACHxL,EAAAA,GAAG,EAAE+L,QAAQ,CAACV,QAAQ,CAACgC,MAAM,CAAC,CAAC;AAC/Ba,EAAAA,KAAK,EAAEwH,oBAAoB;AAC3BvH,EAAAA,MAAM,EAAEuH,oBAAoB;AAC5BE,EAAAA,GAAG,EAAEF,oBAAoB;AACzBvB,EAAAA,IAAI,EAAEuB,oBAAoB;AAC1BxB,EAAAA,MAAM,EAAEwB,oBAAoB;AAC5BtB,EAAAA,KAAK,EAAEsB,oBAAAA;AACX,CAAC,CAAC;;ACrBN,MAAM7B,eAAa,GAAG7H,IAAI,CAACT,MAAM,EAAEA,MAAM,CAAC,CAAA;AAEnC,MAAMsK,gBAAqC,GAAGzH,WAAW,CAC5D3D,QAAQ,CAAC,OAAO,CAAC,EACjBe,MAAM,CAAC;AACHiH,EAAAA,KAAK,EAAE1G,QAAQ,CAACsB,MAAM,CAAC;AACvByI,EAAAA,OAAO,EAAE/J,QAAQ,CAACsB,MAAM,CAAC;AACzB0I,EAAAA,GAAG,EAAEhK,QAAQ,CAACsB,MAAM,CAAC;AACrB4G,EAAAA,eAAe,EAAE0B,2BAA2B;AAC5CtP,EAAAA,MAAM,EAAE0F,QAAQ,CAACvB,OAAO,CAAC;AACzBgK,EAAAA,MAAM,EAAEzI,QAAQ,CACZ7B,KAAK,CACDsB,MAAM,CAAC;AACHhO,IAAAA,OAAO,EAAE6P,MAAM;AACf5H,IAAAA,SAAS,EAAE4H,MAAM;IACjB2I,WAAW,EAAE9L,KAAK,CAACqB,MAAM,CAAA;GAC5B,CACL,CACJ,CAAC;EACDmJ,KAAK,EAAE3I,QAAQ,CAACC,IAAI,CAAC6H,eAAa,EAAEA,eAAa,CAAC,CAAC;EACnDQ,GAAG,EAAEtI,QAAQ,CAAC8H,eAAa,CAAA;AAC/B,CAAC,CACL,CAAC;;ACvBD,MAAMoC,eAA+B,GAAGA,CAACjM,QAAQ,EAAEC,GAAG,KAAK;AACvD,EAAA,IAAI,OAAOD,QAAQ,KAAK,SAAS,EAAE;IAC/B,OAAOC,GAAG,CAACjC,OAAO,CAACT,MAAM,CAACyC,QAAQ,CAAC,CAAC,CAAA;AACxC,GAAA;AACA,EAAA,OAAOC,GAAG,CAAChC,OAAO,CAAC,SAAS,EAAE+B,QAAQ,CAAC,CAAA;AAC3C,CAAC,CAAA;AAEM,MAAMkM,sBAAiD,GAAG9H,WAAW,CACxE3D,QAAQ,CAAC,cAAc,CAAC,EACxBe,MAAM,CAAC;EACH2K,UAAU,EAAEpK,QAAQ,CAChBpB,WAAW,CACP,QAAQ,EACR,SAAS,EACT,SAAS,EACT,UAAU,EACV,UAAU,EACV,OAAO,EACP,SAAS,EACT,IACJ,CACJ,CAAC;AACDyL,EAAAA,OAAO,EAAErK,QAAQ,CAACvB,OAAO,CAAC;AAC1B6L,EAAAA,QAAQ,EAAEtK,QAAQ,CAAC0B,KAAK,CAAClC,MAAM,CAAC,CAACqC,EAAE,CAACP,MAAM,CAAC,CAACvD,MAAM,CAAC;AACnDwM,EAAAA,UAAU,EAAEvK,QAAQ,CAACvB,OAAO,CAAC;EAC7BxE,QAAQ,EAAE2E,WAAW,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC;AACzD4L,EAAAA,IAAI,EAAE5L,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC;AACpC;AACA;AACA;AACA;AACA1E,EAAAA,KAAK,EAAEwH,KAAK,CAAClC,MAAM,CAAC,CAACqC,EAAE,CAACP,MAAM,CAAC,CAACO,EAAE,CAACqI,eAAe,CAAC,CAACnM,MAAM;EAC1D0M,YAAY,EAAEzK,QAAQ,CAACvB,OAAO,CAAA;AAClC,CAAC,CACL,CAAC;;ACxBD,MAAMqJ,eAAa,GAAG7H,IAAI,CAACT,MAAM,EAAEA,MAAM,CAAC,CAAA;AAC1C,MAAMkL,aAAa,GAAG1I,SAAS,CAACV,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;AAEjD,MAAMJ,QAAQ,GAAGV,WAAW,CAACR,QAAQ,CAACsB,MAAM,CAAC,CAAC,CAACX,IAAI,CAAC2D,OAAO,CAAC9I,MAAM,CAAC,CAAC,CAACuC,MAAM,CAAA;AAG3E,MAAM4M,oBAA6C,GAAGlL,MAAM,CAAC;AACzD1N,EAAAA,IAAI,EAAE2M,QAAQ,CAAC,UAAU,CAAC;AAC1B1E,EAAAA,GAAG,EAAEkH,QAAQ;EACbtH,OAAO,EAAE6F,MAAM,CAAC;AACZvF,IAAAA,KAAK,EAAEoH,MAAM;AACbsJ,IAAAA,QAAQ,EAAEtJ,MAAM;AAChBuJ,IAAAA,QAAQ,EAAEvJ,MAAM;AAChBwJ,IAAAA,QAAQ,EAAExJ,MAAM;AAChByJ,IAAAA,KAAK,EAAEzJ,MAAM;AACb0J,IAAAA,eAAe,EAAE1J,MAAM;AACvB2J,IAAAA,WAAW,EAAEzL,MAAAA;GAChB,CAAA;AACL,CAAC,CAAC,CAAA;AAGF,MAAM0L,iBAAuC,GAAGzL,MAAM,CAAC;AACnD1N,EAAAA,IAAI,EAAE2M,QAAQ,CAAC,OAAO,CAAC;AACvB1E,EAAAA,GAAG,EAAEkH,QAAQ;EACbtH,OAAO,EAAE6F,MAAM,CAAC;AACZ0L,IAAAA,KAAK,EAAE7J,MAAM;AACbyJ,IAAAA,KAAK,EAAEzJ,MAAM;AACb8J,IAAAA,MAAM,EAAE9J,MAAM;AACd+J,IAAAA,MAAM,EAAE/J,MAAAA;GACX,CAAA;AACL,CAAC,CAAC,CAAA;AAGF,MAAMgK,gBAAqC,GAAG7L,MAAM,CAAC;AACjD1N,EAAAA,IAAI,EAAE2M,QAAQ,CAAC,MAAM,CAAC;AACtB1E,EAAAA,GAAG,EAAEkH,QAAQ;EACbtH,OAAO,EAAE6F,MAAM,CAAC;AACZsL,IAAAA,KAAK,EAAEzJ,MAAM;AACbiK,IAAAA,MAAM,EAAEjK,MAAM;AACdkK,IAAAA,MAAM,EAAElK,MAAM;AACdmK,IAAAA,IAAI,EAAEnK,MAAM;AACZoK,IAAAA,IAAI,EAAEpK,MAAM;AACZ0J,IAAAA,eAAe,EAAE1J,MAAM;AACvB2J,IAAAA,WAAW,EAAEzL,MAAM;AACnBmM,IAAAA,MAAM,EAAErK,MAAAA;GACX,CAAA;AACL,CAAC,CAAC,CAAA;AAMF,MAAMsK,uBAAmD,GAAGnM,MAAM,CAAC;AAC/D1N,EAAAA,IAAI,EAAE2M,QAAQ,CAAC,cAAc,CAAC;AAC9B1E,EAAAA,GAAG,EAAEkH,QAAQ;EACbtH,OAAO,EAAE6F,MAAM,CAAC;AACZ8L,IAAAA,MAAM,EAAEjK,MAAM;AACdkK,IAAAA,MAAM,EAAElK,MAAM;AACduK,IAAAA,cAAc,EAAErM,MAAM;AACtBiM,IAAAA,IAAI,EAAEnK,MAAM;AACZoK,IAAAA,IAAI,EAAEpK,MAAM;AACZwK,IAAAA,YAAY,EAAEtM,MAAM;AACpBuM,IAAAA,UAAU,EAAEzK,MAAM;AAClB0K,IAAAA,IAAI,EAAExM,MAAM;AACZyM,IAAAA,YAAY,EAAE3K,MAAM;AACpB4K,IAAAA,cAAc,EAAE5K,MAAM;AACtB6K,IAAAA,cAAc,EAAE7K,MAAM;AACtB8K,IAAAA,cAAc,EAAE9K,MAAM;AACtB+K,IAAAA,cAAc,EAAE/K,MAAAA;GACnB,CAAA;AACL,CAAC,CAAC,CAAA;AAMF,MAAMgL,wBAAqD,GAAG7M,MAAM,CAAC;AACjE1N,EAAAA,IAAI,EAAE2M,QAAQ,CAAC,eAAe,CAAC;AAC/B1E,EAAAA,GAAG,EAAEkH,QAAQ;EACbtH,OAAO,EAAE6F,MAAM,CAAC;AACZ8L,IAAAA,MAAM,EAAEjK,MAAM;AACdkK,IAAAA,MAAM,EAAElK,MAAM;AACdiL,IAAAA,YAAY,EAAE/M,MAAM;AACpBuM,IAAAA,UAAU,EAAEzK,MAAM;AAClB0K,IAAAA,IAAI,EAAExM,MAAM;AACZyM,IAAAA,YAAY,EAAE3K,MAAM;AACpB4K,IAAAA,cAAc,EAAExB,aAAa;AAC7ByB,IAAAA,cAAc,EAAEzB,aAAa;AAC7B0B,IAAAA,cAAc,EAAE1B,aAAa;AAC7B2B,IAAAA,cAAc,EAAE3B,aAAAA;GACnB,CAAA;AACL,CAAC,CAAC,CAAA;AAMF,MAAM8B,sBAAiD,GAAG/M,MAAM,CAAC;AAC7D1N,EAAAA,IAAI,EAAE2M,QAAQ,CAAC,YAAY,CAAC;AAC5B1E,EAAAA,GAAG,EAAEkH,QAAQ;EACbtH,OAAO,EAAE6F,MAAM,CAAC;AACZ9O,IAAAA,CAAC,EAAE2Q,MAAM;AACT1Q,IAAAA,CAAC,EAAE0Q,MAAM;AACTuJ,IAAAA,QAAQ,EAAEvJ,MAAM;AAChBwJ,IAAAA,QAAQ,EAAExJ,MAAM;AAChByJ,IAAAA,KAAK,EAAEzJ,MAAM;AACb0J,IAAAA,eAAe,EAAE1J,MAAM;AACvB2J,IAAAA,WAAW,EAAEzL,MAAAA;GAChB,CAAA;AACL,CAAC,CAAC,CAAA;AAGF,MAAMiN,iBAAuC,GAAGhN,MAAM,CAAC;AACnD1N,EAAAA,IAAI,EAAE2M,QAAQ,CAAC,OAAO,CAAC;AACvB1E,EAAAA,GAAG,EAAEkH,QAAQ;EACbtH,OAAO,EAAE6F,MAAM,CAAC;AACZsL,IAAAA,KAAK,EAAEzJ,MAAM;AACb8J,IAAAA,MAAM,EAAE9J,MAAM;AACd+J,IAAAA,MAAM,EAAE/J,MAAAA;GACX,CAAA;AACL,CAAC,CAAC,CAAA;AAGF,MAAMoL,qBAA+C,GAAGjN,MAAM,CAAC;AAC3D1N,EAAAA,IAAI,EAAE2M,QAAQ,CAAC,WAAW,CAAC;AAC3B1E,EAAAA,GAAG,EAAEkH,QAAQ;EACbtH,OAAO,EAAE6F,MAAM,CAAC;AACZsL,IAAAA,KAAK,EAAEzJ,MAAM;AACb8J,IAAAA,MAAM,EAAE9J,MAAM;AACd+J,IAAAA,MAAM,EAAE/J,MAAM;AACda,IAAAA,KAAK,EAAEb,MAAM;AACbc,IAAAA,MAAM,EAAEd,MAAAA;GACX,CAAA;AACL,CAAC,CAAC,CAAA;AAEK,MAAMqL,sBAAiD,GAAGtK,WAAW,CACxE3D,QAAQ,CAAC,aAAa,CAAC,EACvBe,MAAM,CAAC;AACHnF,EAAAA,MAAM,EAAE0H,SAAS,CAACvD,OAAO,EAAE,MAAM,KAAK,CAAC;EACvC7I,KAAK,EAAE6J,MAAM,CAAC;AACV8I,IAAAA,gBAAgB,EAAEvI,QAAQ,CAAC7B,KAAK,CAACS,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AACjE0J,IAAAA,GAAG,EAAER,eAAa;AAClBW,IAAAA,MAAM,EAAEtK,KAAK,CAACmD,MAAM,CAAC;AACrBqH,IAAAA,KAAK,EAAE1I,IAAI,CAAC6H,eAAa,EAAEA,eAAa,CAAC;AACzCU,IAAAA,QAAQ,EAAEV,eAAa;IACvBY,QAAQ,EAAE9J,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC;AAC9CxI,IAAAA,QAAQ,EAAE4J,QAAQ,CAAC8H,eAAa,CAAC;AACjC/B,IAAAA,KAAK,EAAE/F,QAAQ,CAAC0B,KAAK,CAACjD,OAAO,CAAC,CAACoD,EAAE,CAACP,MAAM,CAAC,CAACvD,MAAM,CAAC;AACjDmK,IAAAA,eAAe,EAAElI,QAAQ,CAAC4J,2BAA2B,CAAC;AACtDd,IAAAA,cAAc,EAAE9I,QAAQ,CAACvB,OAAO,CAAC;AACjCsK,IAAAA,SAAS,EAAE/I,QAAQ,CAACvB,OAAO,CAAC;AAC5BmK,IAAAA,UAAU,EAAE5I,QAAQ,CAACsB,MAAM,CAAC;AAC5BuH,IAAAA,UAAU,EAAE7I,QAAQ,CAACR,MAAM,CAAC;AAC5BoN,IAAAA,QAAQ,EAAE9E,eAAAA;AACd,GAAC,CAAC;AACF+E,EAAAA,QAAQ,EAAE1O,KAAK,CACXgJ,oBAAoB,CAAC,MAAM,CAAC,CACvBI,UAAU,CAAC,UAAU,EAAEoD,oBAAoB,CAAC,CAC5CpD,UAAU,CAAC,OAAO,EAAE2D,iBAAiB,CAAC,CACtC3D,UAAU,CAAC,MAAM,EAAE+D,gBAAgB,CAAC,CACpC/D,UAAU,CAAC,cAAc,EAAEqE,uBAAuB,CAAC,CACnDrE,UAAU,CAAC,eAAe,EAAE+E,wBAAwB,CAAC,CACrD/E,UAAU,CAAC,YAAY,EAAEiF,sBAAsB,CAAC,CAChDjF,UAAU,CAAC,OAAO,EAAEkF,iBAAiB,CAAC,CACtClF,UAAU,CAAC,WAAW,EAAEmF,qBAAqB,CAAC,CAAC3O,MACxD,CAAA;AACJ,CAAC,CACL,CAAC;;ACjMD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAI6B;;AAM7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC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"}