@khanacademy/perseus-editor 0.1.2 → 0.3.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/CHANGELOG.md +30 -0
- package/dist/es/index.js +2 -2
- package/dist/es/index.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +14 -6
- package/src/article-editor.jsx +3 -2
- package/src/components/link.jsx +4 -4
- package/src/editor-page.jsx +5 -2
- package/src/hint-editor.jsx +6 -4
- package/src/iframe-content-renderer.jsx +49 -67
- package/src/index.js +0 -2
- package/src/item-editor.jsx +3 -2
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@khanacademy/perseus"),t=require("react"),n=require("underscore"),r=require("prop-types"),s=require("create-react-class"),a=require("jquery"),i=require("react-dom"),o=require("aphrodite"),l=require("classnames"),c=require("@khanacademy/wonder-blocks-i18n");function p(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function h(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(n){if("default"!==n){var r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:function(){return e[n]}})}})),t.default=e,Object.freeze(t)}var u=h(e),d=h(t),m=p(t),f=p(n),g=p(r),v=p(s),y=p(a),b=h(i),E=p(i),w=p(l),x=h(c);function C(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function S(){return S=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},S.apply(this,arguments)}const k={phone:{width:320,height:480,framedWidth:320},tablet:{width:750,height:920,framedWidth:525},desktop:{width:688,height:600,framedWidth:688}};class N extends d.Component{render(){const t=this.props.deviceType;if(this.props.nochrome)return d.createElement("div",null,d.createElement("div",{key:"screen",style:{width:k[t].framedWidth+2*e.constants.perseusFrameBorderWidth+e.constants.lintGutterWidth}},d.createElement("div",null,this.props.children)));const n=k[t].framedWidth/k[t].width,r={backgroundColor:"white",color:"black",textAlign:"left",width:k[t].width,height:k[t].height,border:"solid 1px #CCC",margin:8,zoom:n};return d.createElement("div",{key:"screen",className:"screen",style:r},this.props.children)}}C(N,"propTypes",{children:g.default.element.isRequired,deviceType:g.default.oneOf([e.constants.devices.PHONE,e.constants.devices.TABLET,e.constants.devices.DESKTOP]).isRequired,nochrome:g.default.bool});const T=v.default({displayName:"JsonEditor",getInitialState:function(){return{currentValue:JSON.stringify(this.props.value,null,4),valid:!0}},UNSAFE_componentWillReceiveProps:function(e){(!this.state.valid||!f.default.isEqual(e.value,JSON.parse(this.state.currentValue)))&&this.setState(this.getInitialState())},render:function(){const e="perseus-json-editor "+(this.state.valid?"valid":"invalid");return d.createElement("textarea",{className:e,value:this.state.currentValue,onChange:this.handleChange,onKeyDown:this.handleKeyDown,onBlur:this.handleBlur})},handleKeyDown:function(e){if("Tab"===e.key){const t=e.target.selectionStart,n=e.target.value,r=n.substring(0,t),s=n.substring(t,n.length);e.target.value=r+" "+s,e.target.selectionStart=r.length+4,e.target.selectionEnd=r.length+4,e.preventDefault(),this.handleChange(e)}},handleChange:function(e){const t=e.target.value;try{let e=JSON.parse(t);f.default.isString(e)&&(e=JSON.parse(e)),this.setState({currentValue:t,valid:!0},(function(){this.props.onChange(e)}))}catch(e){this.setState({currentValue:t,valid:!1})}},handleBlur:function(e){const t=e.target.value;try{let e=JSON.parse(t);f.default.isString(e)&&(e=JSON.parse(e)),this.setState({currentValue:JSON.stringify(e,null,4),valid:!0},(function(){this.props.onChange(e)}))}catch(e){this.setState({currentValue:JSON.stringify(this.props.value,null,4),valid:!0})}}}),_=v.default({displayName:"DragTarget",propTypes:{onDrop:g.default.func.isRequired,component:g.default.any,shouldDragHighlight:g.default.func,style:g.default.any},getDefaultProps:function(){return{component:"div",shouldDragHighlight:()=>!0}},getInitialState:function(){return{dragHover:!1}},handleDrop:function(e){e.stopPropagation(),e.preventDefault(),this.setState({dragHover:!1}),this.props.onDrop(e)},handleDragEnd:function(){this.setState({dragHover:!1})},handleDragOver:function(e){e.preventDefault()},handleDragLeave:function(){this.setState({dragHover:!1})},handleDragEnter:function(e){this.setState({dragHover:this.props.shouldDragHighlight(e)})},render:function(){const e=this.state.dragHover?{opacity:.3}:{},t=this.props.component,n=Object.assign({},this.props);return delete n.component,delete n.shouldDragHighlight,d.createElement(t,S({},n,{style:Object.assign({},this.props.style,e),onDrop:this.handleDrop,onDragEnd:this.handleDragEnd,onDragOver:this.handleDragOver,onDragEnter:this.handleDragEnter,onDragLeave:this.handleDragLeave}))}});class O extends d.Component{constructor(){super(...arguments),C(this,"state",{showErrors:!1}),C(this,"handleToggleKatexErrors",(e=>{this.setState({showErrors:!this.state.showErrors})}))}render(){const{errorList:e}=this.props,{showErrors:t}=this.state,n=t?"icon-chevron-down":"icon-chevron-right";return d.createElement("div",{className:o.css(M.errorContainer)},d.createElement("div",{className:o.css(M.title),onClick:this.handleToggleKatexErrors},d.createElement("i",{className:n,style:{fontSize:14}})," KaTeX Errors (",e.length,")"),t&&d.createElement("div",{className:o.css(M.errorExplanation)},"These errors will cause your LaTeX to load really slowly for the student. Please fix them if you can. If you can’t because KaTeX doesn’t support the feature you need, please message Cam."),t&&e.map(((e,t)=>d.createElement("div",{className:o.css(M.error),key:t},d.createElement("div",{style:{color:"red"}},e.math),d.createElement("div",null,e.message)))))}}C(O,"propTypes",{errorList:g.default.arrayOf(g.default.shape({math:g.default.string.isRequired,message:g.default.string.isRequired})).isRequired});const M=o.StyleSheet.create({title:{backgroundColor:"#eee",fontSize:"1.25em",padding:"4px 10px"},errorContainer:{border:"1px solid #ddd",borderTop:"none"},errorExplanation:{padding:"4px 10px",backgroundColor:"pink"},error:{padding:"4px 10px"}});function A(e,t){if(null==e)return{};var n,r,s={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(s[n]=e[n]);return s}function P(){return P=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},P.apply(this,arguments)}function D(e,t){return D=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},D(e,t)}function I(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,D(e,t)}function R(e){return"/"===e.charAt(0)}function z(e,t){for(var n=t,r=n+1,s=e.length;r<s;n+=1,r+=1)e[n]=e[r];e.pop()}var L="production"===process.env.NODE_ENV;function F(e,t){if(!L){if(e)return;var n="Warning: "+t;"undefined"!=typeof console&&console.warn(n);try{throw Error(n)}catch(e){}}}var U="production"===process.env.NODE_ENV,q="Invariant failed";function W(e,t){if(!e){if(U)throw new Error(q);var n="function"==typeof t?t():t;throw new Error(n?q+": "+n:q)}}function V(e){return"/"===e.charAt(0)?e:"/"+e}function j(e){return"/"===e.charAt(0)?e.substr(1):e}function B(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}function $(e,t){return B(e,t)?e.substr(t.length):e}function H(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function G(e){var t=e.pathname,n=e.search,r=e.hash,s=t||"/";return n&&"?"!==n&&(s+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(s+="#"===r.charAt(0)?r:"#"+r),s}function Y(e,t,n,r){var s;"string"==typeof e?(s=function(e){var t=e||"/",n="",r="",s=t.indexOf("#");-1!==s&&(r=t.substr(s),t=t.substr(0,s));var a=t.indexOf("?");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),s.state=t):(void 0===(s=P({},e)).pathname&&(s.pathname=""),s.search?"?"!==s.search.charAt(0)&&(s.search="?"+s.search):s.search="",s.hash?"#"!==s.hash.charAt(0)&&(s.hash="#"+s.hash):s.hash="",void 0!==t&&void 0===s.state&&(s.state=t));try{s.pathname=decodeURI(s.pathname)}catch(e){throw e instanceof URIError?new URIError('Pathname "'+s.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):e}return n&&(s.key=n),r?s.pathname?"/"!==s.pathname.charAt(0)&&(s.pathname=function(e,t){void 0===t&&(t="");var n,r=e&&e.split("/")||[],s=t&&t.split("/")||[],a=e&&R(e),i=t&&R(t),o=a||i;if(e&&R(e)?s=r:r.length&&(s.pop(),s=s.concat(r)),!s.length)return"/";if(s.length){var l=s[s.length-1];n="."===l||".."===l||""===l}else n=!1;for(var c=0,p=s.length;p>=0;p--){var h=s[p];"."===h?z(s,p):".."===h?(z(s,p),c++):c&&(z(s,p),c--)}if(!o)for(;c--;c)s.unshift("..");!o||""===s[0]||s[0]&&R(s[0])||s.unshift("");var u=s.join("/");return n&&"/"!==u.substr(-1)&&(u+="/"),u}(s.pathname,r.pathname)):s.pathname=r.pathname:s.pathname||(s.pathname="/"),s}function K(){var e=null;var t=[];return{setPrompt:function(t){return"production"!==process.env.NODE_ENV&&F(null==e,"A history supports only one prompt at a time"),e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,s){if(null!=e){var a="function"==typeof e?e(t,n):e;"string"==typeof a?"function"==typeof r?r(a,s):("production"!==process.env.NODE_ENV&&F(!1,"A history needs a getUserConfirmation function in order to use a prompt message"),s(!0)):s(!1!==a)}else s(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];t.forEach((function(e){return e.apply(void 0,n)}))}}}var J=!("undefined"==typeof window||!window.document||!window.document.createElement);function X(e,t){t(window.confirm(e))}function Z(){try{return window.history.state||{}}catch(e){return{}}}function Q(e){void 0===e&&(e={}),J||("production"!==process.env.NODE_ENV?W(!1,"Browser history needs a DOM"):W(!1));var t,n=window.history,r=(-1===(t=window.navigator.userAgent).indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history,s=!(-1===window.navigator.userAgent.indexOf("Trident")),a=e,i=a.forceRefresh,o=void 0!==i&&i,l=a.getUserConfirmation,c=void 0===l?X:l,p=a.keyLength,h=void 0===p?6:p,u=e.basename?H(V(e.basename)):"";function d(e){var t=e||{},n=t.key,r=t.state,s=window.location,a=s.pathname+s.search+s.hash;return"production"!==process.env.NODE_ENV&&F(!u||B(a,u),'You are attempting to use a basename on a page whose URL path does not begin with the basename. Expected path "'+a+'" to begin with "'+u+'".'),u&&(a=$(a,u)),Y(a,r,n)}function m(){return Math.random().toString(36).substr(2,h)}var f=K();function g(e){P(_,e),_.length=n.length,f.notifyListeners(_.location,_.action)}function v(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||E(d(e.state))}function y(){E(d(Z()))}var b=!1;function E(e){if(b)b=!1,g();else{f.confirmTransitionTo(e,"POP",c,(function(t){t?g({action:"POP",location:e}):function(e){var t=_.location,n=x.indexOf(t.key);-1===n&&(n=0);var r=x.indexOf(e.key);-1===r&&(r=0);var s=n-r;s&&(b=!0,S(s))}(e)}))}}var w=d(Z()),x=[w.key];function C(e){return u+G(e)}function S(e){n.go(e)}var k=0;function N(e){1===(k+=e)&&1===e?(window.addEventListener("popstate",v),s&&window.addEventListener("hashchange",y)):0===k&&(window.removeEventListener("popstate",v),s&&window.removeEventListener("hashchange",y))}var T=!1;var _={length:n.length,action:"POP",location:w,createHref:C,push:function(e,t){"production"!==process.env.NODE_ENV&&F(!("object"==typeof e&&void 0!==e.state&&void 0!==t),"You should avoid providing a 2nd state argument to push when the 1st argument is a location-like object that already has state; it is ignored");var s="PUSH",a=Y(e,t,m(),_.location);f.confirmTransitionTo(a,s,c,(function(e){if(e){var t=C(a),i=a.key,l=a.state;if(r)if(n.pushState({key:i,state:l},null,t),o)window.location.href=t;else{var c=x.indexOf(_.location.key),p=x.slice(0,c+1);p.push(a.key),x=p,g({action:s,location:a})}else"production"!==process.env.NODE_ENV&&F(void 0===l,"Browser history cannot push state in browsers that do not support HTML5 history"),window.location.href=t}}))},replace:function(e,t){"production"!==process.env.NODE_ENV&&F(!("object"==typeof e&&void 0!==e.state&&void 0!==t),"You should avoid providing a 2nd state argument to replace when the 1st argument is a location-like object that already has state; it is ignored");var s="REPLACE",a=Y(e,t,m(),_.location);f.confirmTransitionTo(a,s,c,(function(e){if(e){var t=C(a),i=a.key,l=a.state;if(r)if(n.replaceState({key:i,state:l},null,t),o)window.location.replace(t);else{var c=x.indexOf(_.location.key);-1!==c&&(x[c]=a.key),g({action:s,location:a})}else"production"!==process.env.NODE_ENV&&F(void 0===l,"Browser history cannot replace state in browsers that do not support HTML5 history"),window.location.replace(t)}}))},go:S,goBack:function(){S(-1)},goForward:function(){S(1)},block:function(e){void 0===e&&(e=!1);var t=f.setPrompt(e);return T||(N(1),T=!0),function(){return T&&(T=!1,N(-1)),t()}},listen:function(e){var t=f.appendListener(e);return N(1),function(){N(-1),t()}}};return _}var ee={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!/"+j(e)},decodePath:function(e){return"!"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:j,decodePath:V},slash:{encodePath:V,decodePath:V}};function te(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function ne(){var e=window.location.href,t=e.indexOf("#");return-1===t?"":e.substring(t+1)}function re(e){window.location.replace(te(window.location.href)+"#"+e)}function se(e){void 0===e&&(e={}),J||("production"!==process.env.NODE_ENV?W(!1,"Hash history needs a DOM"):W(!1));var t=window.history,n=-1===window.navigator.userAgent.indexOf("Firefox"),r=e,s=r.getUserConfirmation,a=void 0===s?X:s,i=r.hashType,o=void 0===i?"slash":i,l=e.basename?H(V(e.basename)):"",c=ee[o],p=c.encodePath,h=c.decodePath;function u(){var e=h(ne());return"production"!==process.env.NODE_ENV&&F(!l||B(e,l),'You are attempting to use a basename on a page whose URL path does not begin with the basename. Expected path "'+e+'" to begin with "'+l+'".'),l&&(e=$(e,l)),Y(e)}var d=K();function m(e){P(N,e),N.length=t.length,d.notifyListeners(N.location,N.action)}var f=!1,g=null;function v(){var e=ne(),t=p(e);if(e!==t)re(t);else{var n=u(),r=N.location;if(!f&&function(e,t){return e.pathname===t.pathname&&e.search===t.search&&e.hash===t.hash}(r,n))return;if(g===G(n))return;g=null,function(e){if(f)f=!1,m();else{var t="POP";d.confirmTransitionTo(e,t,a,(function(n){n?m({action:t,location:e}):function(e){var t=N.location,n=w.lastIndexOf(G(t));-1===n&&(n=0);var r=w.lastIndexOf(G(e));-1===r&&(r=0);var s=n-r;s&&(f=!0,x(s))}(e)}))}}(n)}}var y=ne(),b=p(y);y!==b&&re(b);var E=u(),w=[G(E)];function x(e){"production"!==process.env.NODE_ENV&&F(n,"Hash history go(n) causes a full page reload in this browser"),t.go(e)}var C=0;function S(e){1===(C+=e)&&1===e?window.addEventListener("hashchange",v):0===C&&window.removeEventListener("hashchange",v)}var k=!1;var N={length:t.length,action:"POP",location:E,createHref:function(e){var t=document.querySelector("base"),n="";return t&&t.getAttribute("href")&&(n=te(window.location.href)),n+"#"+p(l+G(e))},push:function(e,t){"production"!==process.env.NODE_ENV&&F(void 0===t,"Hash history cannot push state; it is ignored");var n="PUSH",r=Y(e,void 0,void 0,N.location);d.confirmTransitionTo(r,n,a,(function(e){if(e){var t=G(r),s=p(l+t);if(ne()!==s){g=t,function(e){window.location.hash=e}(s);var a=w.lastIndexOf(G(N.location)),i=w.slice(0,a+1);i.push(t),w=i,m({action:n,location:r})}else"production"!==process.env.NODE_ENV&&F(!1,"Hash history cannot PUSH the same path; a new entry will not be added to the history stack"),m()}}))},replace:function(e,t){"production"!==process.env.NODE_ENV&&F(void 0===t,"Hash history cannot replace state; it is ignored");var n="REPLACE",r=Y(e,void 0,void 0,N.location);d.confirmTransitionTo(r,n,a,(function(e){if(e){var t=G(r),s=p(l+t);ne()!==s&&(g=t,re(s));var a=w.indexOf(G(N.location));-1!==a&&(w[a]=t),m({action:n,location:r})}}))},go:x,goBack:function(){x(-1)},goForward:function(){x(1)},block:function(e){void 0===e&&(e=!1);var t=d.setPrompt(e);return k||(S(1),k=!0),function(){return k&&(k=!1,S(-1)),t()}},listen:function(e){var t=d.appendListener(e);return S(1),function(){S(-1),t()}}};return N}function ae(e,t,n){return Math.min(Math.max(e,t),n)}function ie(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,r=t.initialEntries,s=void 0===r?["/"]:r,a=t.initialIndex,i=void 0===a?0:a,o=t.keyLength,l=void 0===o?6:o,c=K();function p(e){P(g,e),g.length=g.entries.length,c.notifyListeners(g.location,g.action)}function h(){return Math.random().toString(36).substr(2,l)}var u=ae(i,0,s.length-1),d=s.map((function(e){return Y(e,void 0,"string"==typeof e?h():e.key||h())})),m=G;function f(e){var t=ae(g.index+e,0,g.entries.length-1),r=g.entries[t];c.confirmTransitionTo(r,"POP",n,(function(e){e?p({action:"POP",location:r,index:t}):p()}))}var g={length:d.length,action:"POP",location:d[u],index:u,entries:d,createHref:m,push:function(e,t){"production"!==process.env.NODE_ENV&&F(!("object"==typeof e&&void 0!==e.state&&void 0!==t),"You should avoid providing a 2nd state argument to push when the 1st argument is a location-like object that already has state; it is ignored");var r="PUSH",s=Y(e,t,h(),g.location);c.confirmTransitionTo(s,r,n,(function(e){if(e){var t=g.index+1,n=g.entries.slice(0);n.length>t?n.splice(t,n.length-t,s):n.push(s),p({action:r,location:s,index:t,entries:n})}}))},replace:function(e,t){"production"!==process.env.NODE_ENV&&F(!("object"==typeof e&&void 0!==e.state&&void 0!==t),"You should avoid providing a 2nd state argument to replace when the 1st argument is a location-like object that already has state; it is ignored");var r="REPLACE",s=Y(e,t,h(),g.location);c.confirmTransitionTo(s,r,n,(function(e){e&&(g.entries[g.index]=s,p({action:r,location:s}))}))},go:f,goBack:function(){f(-1)},goForward:function(){f(1)},canGo:function(e){var t=g.index+e;return t>=0&&t<g.entries.length},block:function(e){return void 0===e&&(e=!1),c.setPrompt(e)},listen:function(e){return c.appendListener(e)}};return g}var oe="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{};function le(e){var t=[];return{on:function(e){t.push(e)},off:function(e){t=t.filter((function(t){return t!==e}))},get:function(){return e},set:function(n,r){e=n,t.forEach((function(t){return t(e,r)}))}}}var ce=m.default.createContext||function(e,n){var r,s,a="__create-react-context-"+function(){var e="__global_unique_id__";return oe[e]=(oe[e]||0)+1}()+"__",i=function(e){function t(){var t;return(t=e.apply(this,arguments)||this).emitter=le(t.props.value),t}I(t,e);var r=t.prototype;return r.getChildContext=function(){var e;return(e={})[a]=this.emitter,e},r.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var t,r=this.props.value,s=e.value;!function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t}(r,s)?(t="function"==typeof n?n(r,s):1073741823,"production"!==process.env.NODE_ENV&&F((1073741823&t)===t,"calculateChangedBits: Expected the return value to be a 31-bit integer. Instead received: "+t),0!==(t|=0)&&this.emitter.set(e.value,t)):t=0}},r.render=function(){return this.props.children},t}(t.Component);i.childContextTypes=((r={})[a]=g.default.object.isRequired,r);var o=function(t){function n(){var e;return(e=t.apply(this,arguments)||this).state={value:e.getValue()},e.onUpdate=function(t,n){0!=((0|e.observedBits)&n)&&e.setState({value:e.getValue()})},e}I(n,t);var r=n.prototype;return r.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?1073741823:t},r.componentDidMount=function(){this.context[a]&&this.context[a].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?1073741823:e},r.componentWillUnmount=function(){this.context[a]&&this.context[a].off(this.onUpdate)},r.getValue=function(){return this.context[a]?this.context[a].get():e},r.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(t.Component);return o.contextTypes=((s={})[a]=g.default.object,s),{Provider:i,Consumer:o}};"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;function pe(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var he={exports:{}},ue=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)};he.exports=xe,he.exports.parse=me,he.exports.compile=function(e,t){return ge(me(e,t),t)},he.exports.tokensToFunction=ge,he.exports.tokensToRegExp=we;var de=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function me(e,t){for(var n,r=[],s=0,a=0,i="",o=t&&t.delimiter||"/";null!=(n=de.exec(e));){var l=n[0],c=n[1],p=n.index;if(i+=e.slice(a,p),a=p+l.length,c)i+=c[1];else{var h=e[a],u=n[2],d=n[3],m=n[4],f=n[5],g=n[6],v=n[7];i&&(r.push(i),i="");var y=null!=u&&null!=h&&h!==u,b="+"===g||"*"===g,E="?"===g||"*"===g,w=n[2]||o,x=m||f;r.push({name:d||s++,prefix:u||"",delimiter:w,optional:E,repeat:b,partial:y,asterisk:!!v,pattern:x?ye(x):v?".*":"[^"+ve(w)+"]+?"})}}return a<e.length&&(i+=e.substr(a)),i&&r.push(i),r}function fe(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function ge(e,t){for(var n=new Array(e.length),r=0;r<e.length;r++)"object"==typeof e[r]&&(n[r]=new RegExp("^(?:"+e[r].pattern+")$",Ee(t)));return function(t,r){for(var s="",a=t||{},i=(r||{}).pretty?fe:encodeURIComponent,o=0;o<e.length;o++){var l=e[o];if("string"!=typeof l){var c,p=a[l.name];if(null==p){if(l.optional){l.partial&&(s+=l.prefix);continue}throw new TypeError('Expected "'+l.name+'" to be defined')}if(ue(p)){if(!l.repeat)throw new TypeError('Expected "'+l.name+'" to not repeat, but received `'+JSON.stringify(p)+"`");if(0===p.length){if(l.optional)continue;throw new TypeError('Expected "'+l.name+'" to not be empty')}for(var h=0;h<p.length;h++){if(c=i(p[h]),!n[o].test(c))throw new TypeError('Expected all "'+l.name+'" to match "'+l.pattern+'", but received `'+JSON.stringify(c)+"`");s+=(0===h?l.prefix:l.delimiter)+c}}else{if(c=l.asterisk?encodeURI(p).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):i(p),!n[o].test(c))throw new TypeError('Expected "'+l.name+'" to match "'+l.pattern+'", but received "'+c+'"');s+=l.prefix+c}}else s+=l}return s}}function ve(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function ye(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function be(e,t){return e.keys=t,e}function Ee(e){return e&&e.sensitive?"":"i"}function we(e,t,n){ue(t)||(n=t||n,t=[]);for(var r=(n=n||{}).strict,s=!1!==n.end,a="",i=0;i<e.length;i++){var o=e[i];if("string"==typeof o)a+=ve(o);else{var l=ve(o.prefix),c="(?:"+o.pattern+")";t.push(o),o.repeat&&(c+="(?:"+l+c+")*"),a+=c=o.optional?o.partial?l+"("+c+")?":"(?:"+l+"("+c+"))?":l+"("+c+")"}}var p=ve(n.delimiter||"/"),h=a.slice(-p.length)===p;return r||(a=(h?a.slice(0,-p.length):a)+"(?:"+p+"(?=$))?"),a+=s?"$":r&&h?"":"(?="+p+"|$)",be(new RegExp("^"+a,Ee(n)),t)}function xe(e,t,n){return ue(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return be(e,t)}(e,t):ue(e)?function(e,t,n){for(var r=[],s=0;s<e.length;s++)r.push(xe(e[s],t,n).source);return be(new RegExp("(?:"+r.join("|")+")",Ee(n)),t)}(e,t,n):function(e,t,n){return we(me(e,n),t,n)}(e,t,n)}var Ce,Se={exports:{}},ke={};var Ne,Te,_e={};
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@khanacademy/perseus"),t=require("react"),n=require("underscore"),r=require("prop-types"),s=require("create-react-class"),a=require("jquery"),i=require("react-dom"),o=require("aphrodite"),l=require("classnames"),c=require("@khanacademy/wonder-blocks-i18n");function p(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function h(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(n){if("default"!==n){var r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:function(){return e[n]}})}})),t.default=e,Object.freeze(t)}var u=h(t),d=p(t),m=p(n),f=p(r),g=p(s),v=p(a),y=h(i),b=p(i),E=p(l),w=h(c);function x(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function C(){return C=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},C.apply(this,arguments)}const S={phone:{width:320,height:480,framedWidth:320},tablet:{width:750,height:920,framedWidth:525},desktop:{width:688,height:600,framedWidth:688}};class k extends u.Component{render(){const t=this.props.deviceType;if(this.props.nochrome)return u.createElement("div",null,u.createElement("div",{key:"screen",style:{width:S[t].framedWidth+2*e.constants.perseusFrameBorderWidth+e.constants.lintGutterWidth}},u.createElement("div",null,this.props.children)));const n=S[t].framedWidth/S[t].width,r={backgroundColor:"white",color:"black",textAlign:"left",width:S[t].width,height:S[t].height,border:"solid 1px #CCC",margin:8,zoom:n};return u.createElement("div",{key:"screen",className:"screen",style:r},this.props.children)}}x(k,"propTypes",{children:f.default.element.isRequired,deviceType:f.default.oneOf([e.constants.devices.PHONE,e.constants.devices.TABLET,e.constants.devices.DESKTOP]).isRequired,nochrome:f.default.bool});const N=g.default({displayName:"JsonEditor",getInitialState:function(){return{currentValue:JSON.stringify(this.props.value,null,4),valid:!0}},UNSAFE_componentWillReceiveProps:function(e){(!this.state.valid||!m.default.isEqual(e.value,JSON.parse(this.state.currentValue)))&&this.setState(this.getInitialState())},render:function(){const e="perseus-json-editor "+(this.state.valid?"valid":"invalid");return u.createElement("textarea",{className:e,value:this.state.currentValue,onChange:this.handleChange,onKeyDown:this.handleKeyDown,onBlur:this.handleBlur})},handleKeyDown:function(e){if("Tab"===e.key){const t=e.target.selectionStart,n=e.target.value,r=n.substring(0,t),s=n.substring(t,n.length);e.target.value=r+" "+s,e.target.selectionStart=r.length+4,e.target.selectionEnd=r.length+4,e.preventDefault(),this.handleChange(e)}},handleChange:function(e){const t=e.target.value;try{let e=JSON.parse(t);m.default.isString(e)&&(e=JSON.parse(e)),this.setState({currentValue:t,valid:!0},(function(){this.props.onChange(e)}))}catch(e){this.setState({currentValue:t,valid:!1})}},handleBlur:function(e){const t=e.target.value;try{let e=JSON.parse(t);m.default.isString(e)&&(e=JSON.parse(e)),this.setState({currentValue:JSON.stringify(e,null,4),valid:!0},(function(){this.props.onChange(e)}))}catch(e){this.setState({currentValue:JSON.stringify(this.props.value,null,4),valid:!0})}}}),T=g.default({displayName:"DragTarget",propTypes:{onDrop:f.default.func.isRequired,component:f.default.any,shouldDragHighlight:f.default.func,style:f.default.any},getDefaultProps:function(){return{component:"div",shouldDragHighlight:()=>!0}},getInitialState:function(){return{dragHover:!1}},handleDrop:function(e){e.stopPropagation(),e.preventDefault(),this.setState({dragHover:!1}),this.props.onDrop(e)},handleDragEnd:function(){this.setState({dragHover:!1})},handleDragOver:function(e){e.preventDefault()},handleDragLeave:function(){this.setState({dragHover:!1})},handleDragEnter:function(e){this.setState({dragHover:this.props.shouldDragHighlight(e)})},render:function(){const e=this.state.dragHover?{opacity:.3}:{},t=this.props.component,n=Object.assign({},this.props);return delete n.component,delete n.shouldDragHighlight,u.createElement(t,C({},n,{style:Object.assign({},this.props.style,e),onDrop:this.handleDrop,onDragEnd:this.handleDragEnd,onDragOver:this.handleDragOver,onDragEnter:this.handleDragEnter,onDragLeave:this.handleDragLeave}))}});class _ extends u.Component{constructor(){super(...arguments),x(this,"state",{showErrors:!1}),x(this,"handleToggleKatexErrors",(e=>{this.setState({showErrors:!this.state.showErrors})}))}render(){const{errorList:e}=this.props,{showErrors:t}=this.state,n=t?"icon-chevron-down":"icon-chevron-right";return u.createElement("div",{className:o.css(O.errorContainer)},u.createElement("div",{className:o.css(O.title),onClick:this.handleToggleKatexErrors},u.createElement("i",{className:n,style:{fontSize:14}})," KaTeX Errors (",e.length,")"),t&&u.createElement("div",{className:o.css(O.errorExplanation)},"These errors will cause your LaTeX to load really slowly for the student. Please fix them if you can. If you can’t because KaTeX doesn’t support the feature you need, please message Cam."),t&&e.map(((e,t)=>u.createElement("div",{className:o.css(O.error),key:t},u.createElement("div",{style:{color:"red"}},e.math),u.createElement("div",null,e.message)))))}}x(_,"propTypes",{errorList:f.default.arrayOf(f.default.shape({math:f.default.string.isRequired,message:f.default.string.isRequired})).isRequired});const O=o.StyleSheet.create({title:{backgroundColor:"#eee",fontSize:"1.25em",padding:"4px 10px"},errorContainer:{border:"1px solid #ddd",borderTop:"none"},errorExplanation:{padding:"4px 10px",backgroundColor:"pink"},error:{padding:"4px 10px"}});function M(e,t){if(null==e)return{};var n,r,s={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(s[n]=e[n]);return s}function A(){return A=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},A.apply(this,arguments)}function P(e,t){return P=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},P(e,t)}function D(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,P(e,t)}function I(e){return"/"===e.charAt(0)}function R(e,t){for(var n=t,r=n+1,s=e.length;r<s;n+=1,r+=1)e[n]=e[r];e.pop()}var z="production"===process.env.NODE_ENV;function L(e,t){if(!z){if(e)return;var n="Warning: "+t;"undefined"!=typeof console&&console.warn(n);try{throw Error(n)}catch(e){}}}var F="production"===process.env.NODE_ENV,U="Invariant failed";function q(e,t){if(!e){if(F)throw new Error(U);var n="function"==typeof t?t():t;throw new Error(n?U+": "+n:U)}}function W(e){return"/"===e.charAt(0)?e:"/"+e}function V(e){return"/"===e.charAt(0)?e.substr(1):e}function j(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}function B(e,t){return j(e,t)?e.substr(t.length):e}function $(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function H(e){var t=e.pathname,n=e.search,r=e.hash,s=t||"/";return n&&"?"!==n&&(s+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(s+="#"===r.charAt(0)?r:"#"+r),s}function G(e,t,n,r){var s;"string"==typeof e?(s=function(e){var t=e||"/",n="",r="",s=t.indexOf("#");-1!==s&&(r=t.substr(s),t=t.substr(0,s));var a=t.indexOf("?");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),s.state=t):(void 0===(s=A({},e)).pathname&&(s.pathname=""),s.search?"?"!==s.search.charAt(0)&&(s.search="?"+s.search):s.search="",s.hash?"#"!==s.hash.charAt(0)&&(s.hash="#"+s.hash):s.hash="",void 0!==t&&void 0===s.state&&(s.state=t));try{s.pathname=decodeURI(s.pathname)}catch(e){throw e instanceof URIError?new URIError('Pathname "'+s.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):e}return n&&(s.key=n),r?s.pathname?"/"!==s.pathname.charAt(0)&&(s.pathname=function(e,t){void 0===t&&(t="");var n,r=e&&e.split("/")||[],s=t&&t.split("/")||[],a=e&&I(e),i=t&&I(t),o=a||i;if(e&&I(e)?s=r:r.length&&(s.pop(),s=s.concat(r)),!s.length)return"/";if(s.length){var l=s[s.length-1];n="."===l||".."===l||""===l}else n=!1;for(var c=0,p=s.length;p>=0;p--){var h=s[p];"."===h?R(s,p):".."===h?(R(s,p),c++):c&&(R(s,p),c--)}if(!o)for(;c--;c)s.unshift("..");!o||""===s[0]||s[0]&&I(s[0])||s.unshift("");var u=s.join("/");return n&&"/"!==u.substr(-1)&&(u+="/"),u}(s.pathname,r.pathname)):s.pathname=r.pathname:s.pathname||(s.pathname="/"),s}function Y(){var e=null;var t=[];return{setPrompt:function(t){return"production"!==process.env.NODE_ENV&&L(null==e,"A history supports only one prompt at a time"),e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,s){if(null!=e){var a="function"==typeof e?e(t,n):e;"string"==typeof a?"function"==typeof r?r(a,s):("production"!==process.env.NODE_ENV&&L(!1,"A history needs a getUserConfirmation function in order to use a prompt message"),s(!0)):s(!1!==a)}else s(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];t.forEach((function(e){return e.apply(void 0,n)}))}}}var K=!("undefined"==typeof window||!window.document||!window.document.createElement);function J(e,t){t(window.confirm(e))}function X(){try{return window.history.state||{}}catch(e){return{}}}function Z(e){void 0===e&&(e={}),K||("production"!==process.env.NODE_ENV?q(!1,"Browser history needs a DOM"):q(!1));var t,n=window.history,r=(-1===(t=window.navigator.userAgent).indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history,s=!(-1===window.navigator.userAgent.indexOf("Trident")),a=e,i=a.forceRefresh,o=void 0!==i&&i,l=a.getUserConfirmation,c=void 0===l?J:l,p=a.keyLength,h=void 0===p?6:p,u=e.basename?$(W(e.basename)):"";function d(e){var t=e||{},n=t.key,r=t.state,s=window.location,a=s.pathname+s.search+s.hash;return"production"!==process.env.NODE_ENV&&L(!u||j(a,u),'You are attempting to use a basename on a page whose URL path does not begin with the basename. Expected path "'+a+'" to begin with "'+u+'".'),u&&(a=B(a,u)),G(a,r,n)}function m(){return Math.random().toString(36).substr(2,h)}var f=Y();function g(e){A(_,e),_.length=n.length,f.notifyListeners(_.location,_.action)}function v(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||E(d(e.state))}function y(){E(d(X()))}var b=!1;function E(e){if(b)b=!1,g();else{f.confirmTransitionTo(e,"POP",c,(function(t){t?g({action:"POP",location:e}):function(e){var t=_.location,n=x.indexOf(t.key);-1===n&&(n=0);var r=x.indexOf(e.key);-1===r&&(r=0);var s=n-r;s&&(b=!0,S(s))}(e)}))}}var w=d(X()),x=[w.key];function C(e){return u+H(e)}function S(e){n.go(e)}var k=0;function N(e){1===(k+=e)&&1===e?(window.addEventListener("popstate",v),s&&window.addEventListener("hashchange",y)):0===k&&(window.removeEventListener("popstate",v),s&&window.removeEventListener("hashchange",y))}var T=!1;var _={length:n.length,action:"POP",location:w,createHref:C,push:function(e,t){"production"!==process.env.NODE_ENV&&L(!("object"==typeof e&&void 0!==e.state&&void 0!==t),"You should avoid providing a 2nd state argument to push when the 1st argument is a location-like object that already has state; it is ignored");var s="PUSH",a=G(e,t,m(),_.location);f.confirmTransitionTo(a,s,c,(function(e){if(e){var t=C(a),i=a.key,l=a.state;if(r)if(n.pushState({key:i,state:l},null,t),o)window.location.href=t;else{var c=x.indexOf(_.location.key),p=x.slice(0,c+1);p.push(a.key),x=p,g({action:s,location:a})}else"production"!==process.env.NODE_ENV&&L(void 0===l,"Browser history cannot push state in browsers that do not support HTML5 history"),window.location.href=t}}))},replace:function(e,t){"production"!==process.env.NODE_ENV&&L(!("object"==typeof e&&void 0!==e.state&&void 0!==t),"You should avoid providing a 2nd state argument to replace when the 1st argument is a location-like object that already has state; it is ignored");var s="REPLACE",a=G(e,t,m(),_.location);f.confirmTransitionTo(a,s,c,(function(e){if(e){var t=C(a),i=a.key,l=a.state;if(r)if(n.replaceState({key:i,state:l},null,t),o)window.location.replace(t);else{var c=x.indexOf(_.location.key);-1!==c&&(x[c]=a.key),g({action:s,location:a})}else"production"!==process.env.NODE_ENV&&L(void 0===l,"Browser history cannot replace state in browsers that do not support HTML5 history"),window.location.replace(t)}}))},go:S,goBack:function(){S(-1)},goForward:function(){S(1)},block:function(e){void 0===e&&(e=!1);var t=f.setPrompt(e);return T||(N(1),T=!0),function(){return T&&(T=!1,N(-1)),t()}},listen:function(e){var t=f.appendListener(e);return N(1),function(){N(-1),t()}}};return _}var Q={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!/"+V(e)},decodePath:function(e){return"!"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:V,decodePath:W},slash:{encodePath:W,decodePath:W}};function ee(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function te(){var e=window.location.href,t=e.indexOf("#");return-1===t?"":e.substring(t+1)}function ne(e){window.location.replace(ee(window.location.href)+"#"+e)}function re(e){void 0===e&&(e={}),K||("production"!==process.env.NODE_ENV?q(!1,"Hash history needs a DOM"):q(!1));var t=window.history,n=-1===window.navigator.userAgent.indexOf("Firefox"),r=e,s=r.getUserConfirmation,a=void 0===s?J:s,i=r.hashType,o=void 0===i?"slash":i,l=e.basename?$(W(e.basename)):"",c=Q[o],p=c.encodePath,h=c.decodePath;function u(){var e=h(te());return"production"!==process.env.NODE_ENV&&L(!l||j(e,l),'You are attempting to use a basename on a page whose URL path does not begin with the basename. Expected path "'+e+'" to begin with "'+l+'".'),l&&(e=B(e,l)),G(e)}var d=Y();function m(e){A(N,e),N.length=t.length,d.notifyListeners(N.location,N.action)}var f=!1,g=null;function v(){var e=te(),t=p(e);if(e!==t)ne(t);else{var n=u(),r=N.location;if(!f&&function(e,t){return e.pathname===t.pathname&&e.search===t.search&&e.hash===t.hash}(r,n))return;if(g===H(n))return;g=null,function(e){if(f)f=!1,m();else{var t="POP";d.confirmTransitionTo(e,t,a,(function(n){n?m({action:t,location:e}):function(e){var t=N.location,n=w.lastIndexOf(H(t));-1===n&&(n=0);var r=w.lastIndexOf(H(e));-1===r&&(r=0);var s=n-r;s&&(f=!0,x(s))}(e)}))}}(n)}}var y=te(),b=p(y);y!==b&&ne(b);var E=u(),w=[H(E)];function x(e){"production"!==process.env.NODE_ENV&&L(n,"Hash history go(n) causes a full page reload in this browser"),t.go(e)}var C=0;function S(e){1===(C+=e)&&1===e?window.addEventListener("hashchange",v):0===C&&window.removeEventListener("hashchange",v)}var k=!1;var N={length:t.length,action:"POP",location:E,createHref:function(e){var t=document.querySelector("base"),n="";return t&&t.getAttribute("href")&&(n=ee(window.location.href)),n+"#"+p(l+H(e))},push:function(e,t){"production"!==process.env.NODE_ENV&&L(void 0===t,"Hash history cannot push state; it is ignored");var n="PUSH",r=G(e,void 0,void 0,N.location);d.confirmTransitionTo(r,n,a,(function(e){if(e){var t=H(r),s=p(l+t);if(te()!==s){g=t,function(e){window.location.hash=e}(s);var a=w.lastIndexOf(H(N.location)),i=w.slice(0,a+1);i.push(t),w=i,m({action:n,location:r})}else"production"!==process.env.NODE_ENV&&L(!1,"Hash history cannot PUSH the same path; a new entry will not be added to the history stack"),m()}}))},replace:function(e,t){"production"!==process.env.NODE_ENV&&L(void 0===t,"Hash history cannot replace state; it is ignored");var n="REPLACE",r=G(e,void 0,void 0,N.location);d.confirmTransitionTo(r,n,a,(function(e){if(e){var t=H(r),s=p(l+t);te()!==s&&(g=t,ne(s));var a=w.indexOf(H(N.location));-1!==a&&(w[a]=t),m({action:n,location:r})}}))},go:x,goBack:function(){x(-1)},goForward:function(){x(1)},block:function(e){void 0===e&&(e=!1);var t=d.setPrompt(e);return k||(S(1),k=!0),function(){return k&&(k=!1,S(-1)),t()}},listen:function(e){var t=d.appendListener(e);return S(1),function(){S(-1),t()}}};return N}function se(e,t,n){return Math.min(Math.max(e,t),n)}function ae(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,r=t.initialEntries,s=void 0===r?["/"]:r,a=t.initialIndex,i=void 0===a?0:a,o=t.keyLength,l=void 0===o?6:o,c=Y();function p(e){A(g,e),g.length=g.entries.length,c.notifyListeners(g.location,g.action)}function h(){return Math.random().toString(36).substr(2,l)}var u=se(i,0,s.length-1),d=s.map((function(e){return G(e,void 0,"string"==typeof e?h():e.key||h())})),m=H;function f(e){var t=se(g.index+e,0,g.entries.length-1),r=g.entries[t];c.confirmTransitionTo(r,"POP",n,(function(e){e?p({action:"POP",location:r,index:t}):p()}))}var g={length:d.length,action:"POP",location:d[u],index:u,entries:d,createHref:m,push:function(e,t){"production"!==process.env.NODE_ENV&&L(!("object"==typeof e&&void 0!==e.state&&void 0!==t),"You should avoid providing a 2nd state argument to push when the 1st argument is a location-like object that already has state; it is ignored");var r="PUSH",s=G(e,t,h(),g.location);c.confirmTransitionTo(s,r,n,(function(e){if(e){var t=g.index+1,n=g.entries.slice(0);n.length>t?n.splice(t,n.length-t,s):n.push(s),p({action:r,location:s,index:t,entries:n})}}))},replace:function(e,t){"production"!==process.env.NODE_ENV&&L(!("object"==typeof e&&void 0!==e.state&&void 0!==t),"You should avoid providing a 2nd state argument to replace when the 1st argument is a location-like object that already has state; it is ignored");var r="REPLACE",s=G(e,t,h(),g.location);c.confirmTransitionTo(s,r,n,(function(e){e&&(g.entries[g.index]=s,p({action:r,location:s}))}))},go:f,goBack:function(){f(-1)},goForward:function(){f(1)},canGo:function(e){var t=g.index+e;return t>=0&&t<g.entries.length},block:function(e){return void 0===e&&(e=!1),c.setPrompt(e)},listen:function(e){return c.appendListener(e)}};return g}var ie="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{};function oe(e){var t=[];return{on:function(e){t.push(e)},off:function(e){t=t.filter((function(t){return t!==e}))},get:function(){return e},set:function(n,r){e=n,t.forEach((function(t){return t(e,r)}))}}}var le=d.default.createContext||function(e,n){var r,s,a="__create-react-context-"+function(){var e="__global_unique_id__";return ie[e]=(ie[e]||0)+1}()+"__",i=function(e){function t(){var t;return(t=e.apply(this,arguments)||this).emitter=oe(t.props.value),t}D(t,e);var r=t.prototype;return r.getChildContext=function(){var e;return(e={})[a]=this.emitter,e},r.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var t,r=this.props.value,s=e.value;!function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t}(r,s)?(t="function"==typeof n?n(r,s):1073741823,"production"!==process.env.NODE_ENV&&L((1073741823&t)===t,"calculateChangedBits: Expected the return value to be a 31-bit integer. Instead received: "+t),0!==(t|=0)&&this.emitter.set(e.value,t)):t=0}},r.render=function(){return this.props.children},t}(t.Component);i.childContextTypes=((r={})[a]=f.default.object.isRequired,r);var o=function(t){function n(){var e;return(e=t.apply(this,arguments)||this).state={value:e.getValue()},e.onUpdate=function(t,n){0!=((0|e.observedBits)&n)&&e.setState({value:e.getValue()})},e}D(n,t);var r=n.prototype;return r.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?1073741823:t},r.componentDidMount=function(){this.context[a]&&this.context[a].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?1073741823:e},r.componentWillUnmount=function(){this.context[a]&&this.context[a].off(this.onUpdate)},r.getValue=function(){return this.context[a]?this.context[a].get():e},r.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(t.Component);return o.contextTypes=((s={})[a]=f.default.object,s),{Provider:i,Consumer:o}};"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;function ce(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var pe={exports:{}},he=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)};pe.exports=we,pe.exports.parse=de,pe.exports.compile=function(e,t){return fe(de(e,t),t)},pe.exports.tokensToFunction=fe,pe.exports.tokensToRegExp=Ee;var ue=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function de(e,t){for(var n,r=[],s=0,a=0,i="",o=t&&t.delimiter||"/";null!=(n=ue.exec(e));){var l=n[0],c=n[1],p=n.index;if(i+=e.slice(a,p),a=p+l.length,c)i+=c[1];else{var h=e[a],u=n[2],d=n[3],m=n[4],f=n[5],g=n[6],v=n[7];i&&(r.push(i),i="");var y=null!=u&&null!=h&&h!==u,b="+"===g||"*"===g,E="?"===g||"*"===g,w=n[2]||o,x=m||f;r.push({name:d||s++,prefix:u||"",delimiter:w,optional:E,repeat:b,partial:y,asterisk:!!v,pattern:x?ve(x):v?".*":"[^"+ge(w)+"]+?"})}}return a<e.length&&(i+=e.substr(a)),i&&r.push(i),r}function me(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function fe(e,t){for(var n=new Array(e.length),r=0;r<e.length;r++)"object"==typeof e[r]&&(n[r]=new RegExp("^(?:"+e[r].pattern+")$",be(t)));return function(t,r){for(var s="",a=t||{},i=(r||{}).pretty?me:encodeURIComponent,o=0;o<e.length;o++){var l=e[o];if("string"!=typeof l){var c,p=a[l.name];if(null==p){if(l.optional){l.partial&&(s+=l.prefix);continue}throw new TypeError('Expected "'+l.name+'" to be defined')}if(he(p)){if(!l.repeat)throw new TypeError('Expected "'+l.name+'" to not repeat, but received `'+JSON.stringify(p)+"`");if(0===p.length){if(l.optional)continue;throw new TypeError('Expected "'+l.name+'" to not be empty')}for(var h=0;h<p.length;h++){if(c=i(p[h]),!n[o].test(c))throw new TypeError('Expected all "'+l.name+'" to match "'+l.pattern+'", but received `'+JSON.stringify(c)+"`");s+=(0===h?l.prefix:l.delimiter)+c}}else{if(c=l.asterisk?encodeURI(p).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):i(p),!n[o].test(c))throw new TypeError('Expected "'+l.name+'" to match "'+l.pattern+'", but received "'+c+'"');s+=l.prefix+c}}else s+=l}return s}}function ge(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function ve(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function ye(e,t){return e.keys=t,e}function be(e){return e&&e.sensitive?"":"i"}function Ee(e,t,n){he(t)||(n=t||n,t=[]);for(var r=(n=n||{}).strict,s=!1!==n.end,a="",i=0;i<e.length;i++){var o=e[i];if("string"==typeof o)a+=ge(o);else{var l=ge(o.prefix),c="(?:"+o.pattern+")";t.push(o),o.repeat&&(c+="(?:"+l+c+")*"),a+=c=o.optional?o.partial?l+"("+c+")?":"(?:"+l+"("+c+"))?":l+"("+c+")"}}var p=ge(n.delimiter||"/"),h=a.slice(-p.length)===p;return r||(a=(h?a.slice(0,-p.length):a)+"(?:"+p+"(?=$))?"),a+=s?"$":r&&h?"":"(?="+p+"|$)",ye(new RegExp("^"+a,be(n)),t)}function we(e,t,n){return he(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return ye(e,t)}(e,t):he(e)?function(e,t,n){for(var r=[],s=0;s<e.length;s++)r.push(we(e[s],t,n).source);return ye(new RegExp("(?:"+r.join("|")+")",be(n)),t)}(e,t,n):function(e,t,n){return Ee(de(e,n),t,n)}(e,t,n)}var xe,Ce={exports:{}},Se={};var ke,Ne,Te={};
|
|
2
2
|
/** @license React v16.13.1
|
|
3
3
|
* react-is.development.js
|
|
4
4
|
*
|
|
@@ -6,5 +6,5 @@
|
|
|
6
6
|
*
|
|
7
7
|
* This source code is licensed under the MIT license found in the
|
|
8
8
|
* LICENSE file in the root directory of this source tree.
|
|
9
|
-
*/Te=Se,"production"===process.env.NODE_ENV?Te.exports=function(){if(Ce)return ke;Ce=1;var e="function"==typeof Symbol&&Symbol.for,t=e?Symbol.for("react.element"):60103,n=e?Symbol.for("react.portal"):60106,r=e?Symbol.for("react.fragment"):60107,s=e?Symbol.for("react.strict_mode"):60108,a=e?Symbol.for("react.profiler"):60114,i=e?Symbol.for("react.provider"):60109,o=e?Symbol.for("react.context"):60110,l=e?Symbol.for("react.async_mode"):60111,c=e?Symbol.for("react.concurrent_mode"):60111,p=e?Symbol.for("react.forward_ref"):60112,h=e?Symbol.for("react.suspense"):60113,u=e?Symbol.for("react.suspense_list"):60120,d=e?Symbol.for("react.memo"):60115,m=e?Symbol.for("react.lazy"):60116,f=e?Symbol.for("react.block"):60121,g=e?Symbol.for("react.fundamental"):60117,v=e?Symbol.for("react.responder"):60118,y=e?Symbol.for("react.scope"):60119;function b(e){if("object"==typeof e&&null!==e){var u=e.$$typeof;switch(u){case t:switch(e=e.type){case l:case c:case r:case a:case s:case h:return e;default:switch(e=e&&e.$$typeof){case o:case p:case m:case d:case i:return e;default:return u}}case n:return u}}}function E(e){return b(e)===c}return ke.AsyncMode=l,ke.ConcurrentMode=c,ke.ContextConsumer=o,ke.ContextProvider=i,ke.Element=t,ke.ForwardRef=p,ke.Fragment=r,ke.Lazy=m,ke.Memo=d,ke.Portal=n,ke.Profiler=a,ke.StrictMode=s,ke.Suspense=h,ke.isAsyncMode=function(e){return E(e)||b(e)===l},ke.isConcurrentMode=E,ke.isContextConsumer=function(e){return b(e)===o},ke.isContextProvider=function(e){return b(e)===i},ke.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===t},ke.isForwardRef=function(e){return b(e)===p},ke.isFragment=function(e){return b(e)===r},ke.isLazy=function(e){return b(e)===m},ke.isMemo=function(e){return b(e)===d},ke.isPortal=function(e){return b(e)===n},ke.isProfiler=function(e){return b(e)===a},ke.isStrictMode=function(e){return b(e)===s},ke.isSuspense=function(e){return b(e)===h},ke.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===r||e===c||e===a||e===s||e===h||e===u||"object"==typeof e&&null!==e&&(e.$$typeof===m||e.$$typeof===d||e.$$typeof===i||e.$$typeof===o||e.$$typeof===p||e.$$typeof===g||e.$$typeof===v||e.$$typeof===y||e.$$typeof===f)},ke.typeOf=b,ke}():Te.exports=(Ne||(Ne=1,"production"!==process.env.NODE_ENV&&function(){var e="function"==typeof Symbol&&Symbol.for,t=e?Symbol.for("react.element"):60103,n=e?Symbol.for("react.portal"):60106,r=e?Symbol.for("react.fragment"):60107,s=e?Symbol.for("react.strict_mode"):60108,a=e?Symbol.for("react.profiler"):60114,i=e?Symbol.for("react.provider"):60109,o=e?Symbol.for("react.context"):60110,l=e?Symbol.for("react.async_mode"):60111,c=e?Symbol.for("react.concurrent_mode"):60111,p=e?Symbol.for("react.forward_ref"):60112,h=e?Symbol.for("react.suspense"):60113,u=e?Symbol.for("react.suspense_list"):60120,d=e?Symbol.for("react.memo"):60115,m=e?Symbol.for("react.lazy"):60116,f=e?Symbol.for("react.block"):60121,g=e?Symbol.for("react.fundamental"):60117,v=e?Symbol.for("react.responder"):60118,y=e?Symbol.for("react.scope"):60119;function b(e){if("object"==typeof e&&null!==e){var u=e.$$typeof;switch(u){case t:var f=e.type;switch(f){case l:case c:case r:case a:case s:case h:return f;default:var g=f&&f.$$typeof;switch(g){case o:case p:case m:case d:case i:return g;default:return u}}case n:return u}}}var E=l,w=c,x=o,C=i,S=t,k=p,N=r,T=m,_=d,O=n,M=a,A=s,P=h,D=!1;function I(e){return b(e)===c}_e.AsyncMode=E,_e.ConcurrentMode=w,_e.ContextConsumer=x,_e.ContextProvider=C,_e.Element=S,_e.ForwardRef=k,_e.Fragment=N,_e.Lazy=T,_e.Memo=_,_e.Portal=O,_e.Profiler=M,_e.StrictMode=A,_e.Suspense=P,_e.isAsyncMode=function(e){return D||(D=!0,console.warn("The ReactIs.isAsyncMode() alias has been deprecated, and will be removed in React 17+. Update your code to use ReactIs.isConcurrentMode() instead. It has the exact same API.")),I(e)||b(e)===l},_e.isConcurrentMode=I,_e.isContextConsumer=function(e){return b(e)===o},_e.isContextProvider=function(e){return b(e)===i},_e.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===t},_e.isForwardRef=function(e){return b(e)===p},_e.isFragment=function(e){return b(e)===r},_e.isLazy=function(e){return b(e)===m},_e.isMemo=function(e){return b(e)===d},_e.isPortal=function(e){return b(e)===n},_e.isProfiler=function(e){return b(e)===a},_e.isStrictMode=function(e){return b(e)===s},_e.isSuspense=function(e){return b(e)===h},_e.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===r||e===c||e===a||e===s||e===h||e===u||"object"==typeof e&&null!==e&&(e.$$typeof===m||e.$$typeof===d||e.$$typeof===i||e.$$typeof===o||e.$$typeof===p||e.$$typeof===g||e.$$typeof===v||e.$$typeof===y||e.$$typeof===f)},_e.typeOf=b}()),_e);var Oe=Se.exports,Me={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},Ae={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},Pe={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},De={};function Ie(e){return Oe.isMemo(e)?Pe:De[e.$$typeof]||Me}De[Oe.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},De[Oe.Memo]=Pe;var Re=Object.defineProperty,ze=Object.getOwnPropertyNames,Le=Object.getOwnPropertySymbols,Fe=Object.getOwnPropertyDescriptor,Ue=Object.getPrototypeOf,qe=Object.prototype;var We=function e(t,n,r){if("string"!=typeof n){if(qe){var s=Ue(n);s&&s!==qe&&e(t,s,r)}var a=ze(n);Le&&(a=a.concat(Le(n)));for(var i=Ie(t),o=Ie(n),l=0;l<a.length;++l){var c=a[l];if(!(Ae[c]||r&&r[c]||o&&o[c]||i&&i[c])){var p=Fe(n,c);try{Re(t,c,p)}catch(e){}}}}return t},Ve=function(e){var t=ce();return t.displayName=e,t},je=Ve("Router-History"),Be=Ve("Router"),$e=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen((function(e){n._isMounted?n.setState({location:e}):n._pendingLocation=e}))),n}I(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){this._isMounted=!0,this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&(this.unlisten(),this._isMounted=!1,this._pendingLocation=null)},n.render=function(){return m.default.createElement(Be.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},m.default.createElement(je.Provider,{children:this.props.children||null,value:this.props.history}))},t}(m.default.Component);"production"!==process.env.NODE_ENV&&($e.propTypes={children:g.default.node,history:g.default.object.isRequired,staticContext:g.default.object},$e.prototype.componentDidUpdate=function(e){"production"!==process.env.NODE_ENV&&F(e.history===this.props.history,"You cannot change <Router history>")});var He=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return(t=e.call.apply(e,[this].concat(r))||this).history=ie(t.props),t}return I(t,e),t.prototype.render=function(){return m.default.createElement($e,{history:this.history,children:this.props.children})},t}(m.default.Component);if("production"!==process.env.NODE_ENV&&(He.propTypes={initialEntries:g.default.array,initialIndex:g.default.number,getUserConfirmation:g.default.func,keyLength:g.default.number,children:g.default.node},He.prototype.componentDidMount=function(){"production"!==process.env.NODE_ENV&&F(!this.props.history,"<MemoryRouter> ignores the history prop. To use a custom history, use `import { Router }` instead of `import { MemoryRouter as Router }`.")}),m.default.Component,"production"!==process.env.NODE_ENV){var Ge=g.default.oneOfType([g.default.func,g.default.string]);g.default.bool,Ge.isRequired}"production"!==process.env.NODE_ENV&&(g.default.bool,g.default.string,g.default.oneOfType([g.default.string,g.default.object]).isRequired);var Ye={},Ke=0;function Je(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var n=t,r=n.path,s=n.exact,a=void 0!==s&&s,i=n.strict,o=void 0!==i&&i,l=n.sensitive,c=void 0!==l&&l;return[].concat(r).reduce((function(t,n){if(!n&&""!==n)return null;if(t)return t;var r=function(e,t){var n=""+t.end+t.strict+t.sensitive,r=Ye[n]||(Ye[n]={});if(r[e])return r[e];var s=[],a={regexp:he.exports(e,s,t),keys:s};return Ke<1e4&&(r[e]=a,Ke++),a}(n,{end:a,strict:o,sensitive:c}),s=r.regexp,i=r.keys,l=s.exec(e);if(!l)return null;var p=l[0],h=l.slice(1),u=e===p;return a&&!u?null:{path:n,url:"/"===n&&""===p?"/":p,isExact:u,params:i.reduce((function(e,t,n){return e[t.name]=h[n],e}),{})}}),null)}function Xe(e){return 0===m.default.Children.count(e)}function Ze(e,t,n){var r=e(t);return"production"!==process.env.NODE_ENV&&F(void 0!==r,"You returned `undefined` from the `children` function of <Route"+(n?' path="'+n+'"':"")+">, but you should have returned a React element or `null`"),r||null}var Qe=function(e){function t(){return e.apply(this,arguments)||this}return I(t,e),t.prototype.render=function(){var e=this;return m.default.createElement(Be.Consumer,null,(function(t){t||("production"!==process.env.NODE_ENV?W(!1,"You should not use <Route> outside a <Router>"):W(!1));var n=e.props.location||t.location,r=P({},t,{location:n,match:e.props.computedMatch?e.props.computedMatch:e.props.path?Je(n.pathname,e.props):t.match}),s=e.props,a=s.children,i=s.component,o=s.render;return Array.isArray(a)&&Xe(a)&&(a=null),m.default.createElement(Be.Provider,{value:r},r.match?a?"function"==typeof a?"production"!==process.env.NODE_ENV?Ze(a,r,e.props.path):a(r):a:i?m.default.createElement(i,r):o?o(r):null:"function"==typeof a?"production"!==process.env.NODE_ENV?Ze(a,r,e.props.path):a(r):null)}))},t}(m.default.Component);function et(e){return"/"===e.charAt(0)?e:"/"+e}function tt(e,t){if(!e)return t;var n=et(e);return 0!==t.pathname.indexOf(n)?t:P({},t,{pathname:t.pathname.substr(n.length)})}function nt(e){return"string"==typeof e?e:G(e)}function rt(e){return function(){"production"!==process.env.NODE_ENV?W(!1,"You cannot %s with <StaticRouter>"):W(!1)}}function st(){}"production"!==process.env.NODE_ENV&&(Qe.propTypes={children:g.default.oneOfType([g.default.func,g.default.node]),component:function(e,t){if(e[t]&&!Se.exports.isValidElementType(e[t]))return new Error("Invalid prop 'component' supplied to 'Route': the prop is not a valid React component")},exact:g.default.bool,location:g.default.object,path:g.default.oneOfType([g.default.string,g.default.arrayOf(g.default.string)]),render:g.default.func,sensitive:g.default.bool,strict:g.default.bool},Qe.prototype.componentDidMount=function(){"production"!==process.env.NODE_ENV&&F(!(this.props.children&&!Xe(this.props.children)&&this.props.component),"You should not use <Route component> and <Route children> in the same route; <Route component> will be ignored"),"production"!==process.env.NODE_ENV&&F(!(this.props.children&&!Xe(this.props.children)&&this.props.render),"You should not use <Route render> and <Route children> in the same route; <Route render> will be ignored"),"production"!==process.env.NODE_ENV&&F(!(this.props.component&&this.props.render),"You should not use <Route component> and <Route render> in the same route; <Route render> will be ignored")},Qe.prototype.componentDidUpdate=function(e){"production"!==process.env.NODE_ENV&&F(!(this.props.location&&!e.location),'<Route> elements should not change from uncontrolled to controlled (or vice versa). You initially used no "location" prop and then provided one on a subsequent render.'),"production"!==process.env.NODE_ENV&&F(!(!this.props.location&&e.location),'<Route> elements should not change from controlled to uncontrolled (or vice versa). You provided a "location" prop initially but omitted it on a subsequent render.')});var at=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return(t=e.call.apply(e,[this].concat(r))||this).handlePush=function(e){return t.navigateTo(e,"PUSH")},t.handleReplace=function(e){return t.navigateTo(e,"REPLACE")},t.handleListen=function(){return st},t.handleBlock=function(){return st},t}I(t,e);var n=t.prototype;return n.navigateTo=function(e,t){var n=this.props,r=n.basename,s=void 0===r?"":r,a=n.context,i=void 0===a?{}:a;i.action=t,i.location=function(e,t){return e?P({},t,{pathname:et(e)+t.pathname}):t}(s,Y(e)),i.url=nt(i.location)},n.render=function(){var e=this.props,t=e.basename,n=void 0===t?"":t,r=e.context,s=void 0===r?{}:r,a=e.location,i=void 0===a?"/":a,o=A(e,["basename","context","location"]),l={createHref:function(e){return et(n+nt(e))},action:"POP",location:tt(n,Y(i)),push:this.handlePush,replace:this.handleReplace,go:rt(),goBack:rt(),goForward:rt(),listen:this.handleListen,block:this.handleBlock};return m.default.createElement($e,P({},o,{history:l,staticContext:s}))},t}(m.default.Component);"production"!==process.env.NODE_ENV&&(at.propTypes={basename:g.default.string,context:g.default.object,location:g.default.oneOfType([g.default.string,g.default.object])},at.prototype.componentDidMount=function(){"production"!==process.env.NODE_ENV&&F(!this.props.history,"<StaticRouter> ignores the history prop. To use a custom history, use `import { Router }` instead of `import { StaticRouter as Router }`.")});var it=function(e){function t(){return e.apply(this,arguments)||this}return I(t,e),t.prototype.render=function(){var e=this;return m.default.createElement(Be.Consumer,null,(function(t){t||("production"!==process.env.NODE_ENV?W(!1,"You should not use <Switch> outside a <Router>"):W(!1));var n,r,s=e.props.location||t.location;return m.default.Children.forEach(e.props.children,(function(e){if(null==r&&m.default.isValidElement(e)){n=e;var a=e.props.path||e.props.from;r=a?Je(s.pathname,P({},e.props,{path:a})):t.match}})),r?m.default.cloneElement(n,{location:s,computedMatch:r}):null}))},t}(m.default.Component);if("production"!==process.env.NODE_ENV&&(it.propTypes={children:g.default.node,location:g.default.object},it.prototype.componentDidUpdate=function(e){"production"!==process.env.NODE_ENV&&F(!(this.props.location&&!e.location),'<Switch> elements should not change from uncontrolled to controlled (or vice versa). You initially used no "location" prop and then provided one on a subsequent render.'),"production"!==process.env.NODE_ENV&&F(!(!this.props.location&&e.location),'<Switch> elements should not change from controlled to uncontrolled (or vice versa). You provided a "location" prop initially but omitted it on a subsequent render.')}),m.default.useContext,"production"!==process.env.NODE_ENV&&"undefined"!=typeof window){var ot=window,lt="__react_router_build__",ct={cjs:"CommonJS",esm:"ES modules",umd:"UMD"};if(ot[lt]&&"esm"!==ot[lt]){var pt=ct[ot[lt]];throw new Error("You are loading the "+ct.esm+" build of React Router on a page that is already running the "+pt+" build, so things won't work right.")}ot[lt]="esm"}var ht=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return(t=e.call.apply(e,[this].concat(r))||this).history=Q(t.props),t}return I(t,e),t.prototype.render=function(){return m.default.createElement($e,{history:this.history,children:this.props.children})},t}(m.default.Component);"production"!==process.env.NODE_ENV&&(ht.propTypes={basename:g.default.string,children:g.default.node,forceRefresh:g.default.bool,getUserConfirmation:g.default.func,keyLength:g.default.number},ht.prototype.componentDidMount=function(){"production"!==process.env.NODE_ENV&&F(!this.props.history,"<BrowserRouter> ignores the history prop. To use a custom history, use `import { Router }` instead of `import { BrowserRouter as Router }`.")});var ut=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return(t=e.call.apply(e,[this].concat(r))||this).history=se(t.props),t}return I(t,e),t.prototype.render=function(){return m.default.createElement($e,{history:this.history,children:this.props.children})},t}(m.default.Component);"production"!==process.env.NODE_ENV&&(ut.propTypes={basename:g.default.string,children:g.default.node,getUserConfirmation:g.default.func,hashType:g.default.oneOf(["hashbang","noslash","slash"])},ut.prototype.componentDidMount=function(){"production"!==process.env.NODE_ENV&&F(!this.props.history,"<HashRouter> ignores the history prop. To use a custom history, use `import { Router }` instead of `import { HashRouter as Router }`.")});var dt=function(e,t){return"function"==typeof e?e(t):e},mt=function(e,t){return"string"==typeof e?Y(e,null,null,t):e},ft=function(e){return e},gt=m.default.forwardRef;void 0===gt&&(gt=ft);var vt=gt((function(e,t){var n=e.innerRef,r=e.navigate,s=e.onClick,a=A(e,["innerRef","navigate","onClick"]),i=a.target,o=P({},a,{onClick:function(e){try{s&&s(e)}catch(t){throw e.preventDefault(),t}e.defaultPrevented||0!==e.button||i&&"_self"!==i||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)||(e.preventDefault(),r())}});return o.ref=ft!==gt&&t||n,m.default.createElement("a",o)}));"production"!==process.env.NODE_ENV&&(vt.displayName="LinkAnchor");var yt=gt((function(e,t){var n=e.component,r=void 0===n?vt:n,s=e.replace,a=e.to,i=e.innerRef,o=A(e,["component","replace","to","innerRef"]);return m.default.createElement(Be.Consumer,null,(function(e){e||("production"!==process.env.NODE_ENV?W(!1,"You should not use <Link> outside a <Router>"):W(!1));var n=e.history,l=mt(dt(a,e.location),e.location),c=l?n.createHref(l):"",p=P({},o,{href:c,navigate:function(){var t=dt(a,e.location),r=G(e.location)===G(mt(t));(s||r?n.replace:n.push)(t)}});return ft!==gt?p.ref=t||i:p.innerRef=i,m.default.createElement(r,p)}))}));if("production"!==process.env.NODE_ENV){var bt=g.default.oneOfType([g.default.string,g.default.object,g.default.func]),Et=g.default.oneOfType([g.default.string,g.default.func,g.default.shape({current:g.default.any})]);yt.displayName="Link",yt.propTypes={innerRef:Et,onClick:g.default.func,replace:g.default.bool,target:g.default.string,to:bt.isRequired}}var wt=function(e){return e},xt=m.default.forwardRef;void 0===xt&&(xt=wt);var Ct=xt((function(e,t){var n=e["aria-current"],r=void 0===n?"page":n,s=e.activeClassName,a=void 0===s?"active":s,i=e.activeStyle,o=e.className,l=e.exact,c=e.isActive,p=e.location,h=e.sensitive,u=e.strict,d=e.style,f=e.to,g=e.innerRef,v=A(e,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return m.default.createElement(Be.Consumer,null,(function(e){e||("production"!==process.env.NODE_ENV?W(!1,"You should not use <NavLink> outside a <Router>"):W(!1));var n=p||e.location,s=mt(dt(f,n),n),y=s.pathname,b=y&&y.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),E=b?Je(n.pathname,{path:b,exact:l,sensitive:h,strict:u}):null,w=!!(c?c(E,n):E),x="function"==typeof o?o(w):o,C="function"==typeof d?d(w):d;w&&(x=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.filter((function(e){return e})).join(" ")}(x,a),C=P({},C,i));var S=P({"aria-current":w&&r||null,className:x,style:C,to:s},v);return wt!==xt?S.ref=t||g:S.innerRef=g,m.default.createElement(yt,S)}))}));if("production"!==process.env.NODE_ENV){Ct.displayName="NavLink";var St=g.default.oneOf(["page","step","location","date","time","true","false"]);Ct.propTypes=P({},yt.propTypes,{"aria-current":St,activeClassName:g.default.string,activeStyle:g.default.object,className:g.default.oneOfType([g.default.string,g.default.func]),exact:g.default.bool,isActive:g.default.func,location:g.default.object,sensitive:g.default.bool,strict:g.default.bool,style:g.default.oneOfType([g.default.object,g.default.func])})}function kt(e){const t=[];if(!e)return t;if(Array.isArray(e))for(const n of e)t.push.apply(t,kt(n));else t.push(e);return t}function Nt(e){const t=[],n=[];if(!e)return{style:{},className:""};const r="undefined"!=typeof global&&global.SNAPSHOT_INLINE_APHRODITE;kt(e).forEach((e=>{const s=e._definition;if(null!=s)if(r){const e={};for(const[t,n]of Object.entries(s))e[t.replace(/-[a-z]/g,(e=>e[1].toUpperCase()))]=n;n.push(e)}else t.push(e);else n.push(e)}));const s=Object.assign.apply(Object,[{}].concat(n));if(n.length>0&&!r){const e=o.StyleSheet.create({inlineStyles:s});t.push(e.inlineStyles)}return{style:r?s:{},className:o.css.apply(void 0,t)}}const Tt=["children","style","tag","testId"],_t=/^h[1-6]$/,Ot=o.StyleSheet.create({text:{WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale"},header:{marginTop:0,marginBottom:0}});class Mt extends d.Component{render(){const e=this.props,{children:t,style:n,tag:r,testId:s}=e,a=A(e,Tt),i=_t.test(r),o=Nt([Ot.text,i&&Ot.header,n]);return d.createElement(r,P({},a,{style:o.style,className:o.className,"data-test-id":s}),t)}}Mt.defaultProps={tag:"span"};const At=["className","style"];function Pt(e,t){return function(n){const{className:r,style:s}=n,a=A(n,At),i="string"==typeof e?Dt[e]:null,{className:o,style:l}=Nt([i,t,s]);return d.createElement(e,P({},a,{className:[o,r].filter(Boolean).join(" "),style:l}))}}const Dt=o.StyleSheet.create({button:{margin:0,"::-moz-focus-inner":{border:0}}}),It=["testId","tag"],Rt=o.StyleSheet.create({default:{alignItems:"stretch",borderWidth:0,borderStyle:"solid",boxSizing:"border-box",display:"flex",flexDirection:"column",margin:0,padding:0,position:"relative",zIndex:0,minHeight:0,minWidth:0}}),zt=Pt("div",Rt.default),Lt=Pt("article",Rt.default),Ft=Pt("aside",Rt.default),Ut=Pt("nav",Rt.default),qt=Pt("section",Rt.default);class Wt extends d.Component{render(){const e=this.props,{testId:t,tag:n}=e,r=P({},A(e,It),{"data-test-id":t});switch(n){case"article":return d.createElement(Lt,r);case"aside":return d.createElement(Ft,r);case"nav":return d.createElement(Ut,r);case"section":return d.createElement(qt,r);case"div":return d.createElement(zt,r);default:throw Error(`${n} is not an allowed value for the 'tag' prop`)}}}Wt.defaultProps={tag:"div"};const Vt=require("flow-enums-runtime")({Root:"root",Initial:"initial",Standard:"standard"}),jt=d.createContext(Vt.Root);class Bt extends d.Component{constructor(...e){super(...e),this.state={mounted:!1},this._isTheRootComponent=!1}componentDidMount(){this._isTheRootComponent&&this.setState({mounted:!0})}_renderAsRootComponent(){const{mounted:e}=this.state,{children:t,placeholder:n}=this.props;return this._isTheRootComponent=!0,e?d.createElement(jt.Provider,{value:Vt.Standard},t()):n?d.createElement(jt.Provider,{value:Vt.Initial},n()):null}_maybeRender(e){const{children:t,placeholder:n}=this.props;switch(e){case Vt.Root:return this._renderAsRootComponent();case Vt.Initial:return n?n():null;case Vt.Standard:return t()}return console.log(`We got a render state we don't understand: "${JSON.stringify(e)}"`),this._maybeRender(Vt.Root)}render(){return d.createElement(jt.Consumer,null,(e=>this._maybeRender(e)))}}class $t{constructor(e){this.get=e=>{const t=e.toLowerCase();if(!this._hasValidIdChars(e))throw new Error(`Invalid identifier key: ${e}`);return`${this._uniqueFactoryName}-${t}`};const t=(e="string"==typeof e?e:"").toLowerCase();if(!this._hasValidIdChars(t))throw new Error(`Invalid factory scope: ${e}`);this._uniqueFactoryName=`uid-${t}-${$t._factoryUniquenessCounter++}`}_hasValidIdChars(e){if("string"!=typeof e)return!1;const t=e.replace(/[^\d\w-]/g,"-");return e===t}}$t._factoryUniquenessCounter=0;class Ht{get(e){return e}}Ht.Default=new Ht;var Gt=Ht.Default;class Yt extends d.Component{_performRender(e){const{children:t,mockOnFirstRender:n,scope:r}=this.props;return e?n?t(Gt):null:(this._idFactory||(this._idFactory=new $t(r)),t(this._idFactory))}render(){return d.createElement(Bt,{placeholder:()=>this._performRender(!0)},(()=>this._performRender(!1)))}}class Kt extends d.Component{renderChildren(e){const{id:t,children:n}=this.props,r=e?e.get(Kt.defaultId):t;if(!r)throw new Error("Did not get an identifier factory nor a id prop");return n(r)}render(){const{id:e,scope:t}=this.props;return e?this.renderChildren():d.createElement(Yt,{scope:t,mockOnFirstRender:!0},(e=>this.renderChildren(e)))}}Kt.defaultId="wb-id";const Jt=/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i,Xt=/^#([0-9a-f])([0-9a-f])([0-9a-f])$/i,Zt=/^rgba?\(\s*(\d+),\s*(\d+),\s*(\d+)(?:,\s*([\d.]+))?\s*\)$/i,Qt=e=>{if("string"!=typeof e)throw new Error(`Failed to parse color: ${e}`);const t=e.match(Xt);if(t)return{r:parseInt(`${t[1]}${t[1]}`,16),g:parseInt(`${t[2]}${t[2]}`,16),b:parseInt(`${t[3]}${t[3]}`,16),a:1};const n=e.match(Jt);if(n)return{r:parseInt(n[1],16),g:parseInt(n[2],16),b:parseInt(n[3],16),a:1};const r=e.match(Zt);if(r)return{r:parseFloat(r[1]),g:parseFloat(r[2]),b:parseFloat(r[3]),a:r[4]?parseFloat(r[4]):1};throw new Error(`Failed to parse color: ${e}`)},en=e=>{const t=Math.round(e.r),n=Math.round(e.g),r=Math.round(e.b);if(1===e.a){const e=e=>{const t=e.toString(16);return 1===t.length?t+t:t};return`#${e(t)}${e(n)}${e(r)}`}return`rgba(${t},${n},${r},${e.a.toFixed(2)})`},tn=(e,t)=>{if(t<0||t>1)throw new Error("Percentage must be between 0 and 1");const n=Qt(e);return en(P({},n,{a:n.a*t}))},nn=(e,t)=>{const n=Qt(e),r=Qt(t);return en({r:n.r*n.a+r.r*(1-n.a),g:n.g*n.a+r.g*(1-n.a),b:n.b*n.a+r.b*(1-n.a),a:r.a})},rn={blue:"#1865f2",purple:"#9059ff",green:"#00a60e",gold:"#ffb100",red:"#d92916",offBlack:"#21242c",offBlack64:tn("#21242c",.64),offBlack50:tn("#21242c",.5),offBlack32:tn("#21242c",.32),offBlack16:tn("#21242c",.16),offBlack8:tn("#21242c",.08),offWhite:"#f7f8fa",white:"#ffffff",white64:tn("#ffffff",.64),white50:tn("#ffffff",.5),darkBlue:"#0a2a66",teal:"#14bf96",lightBlue:"#37c5fd",pink:"#fa50ae"},sn={controlDefault:rn.blue,controlDestructive:rn.red},an=e=>{switch(e){case"link":return{triggerOnEnter:!0,triggerOnSpace:!1};case"checkbox":case"radio":case"listbox":case"option":return{triggerOnEnter:!1,triggerOnSpace:!0};default:return{triggerOnEnter:!0,triggerOnSpace:!0}}},on={onClick:()=>{},onMouseEnter:()=>{},onMouseLeave:()=>{},onMouseDown:()=>{},onMouseUp:()=>{},onDragStart:()=>{},onTouchStart:()=>{},onTouchEnd:()=>{},onTouchCancel:()=>{},onKeyDown:()=>{},onKeyUp:()=>{},tabIndex:0},ln=13,cn=32,pn={hovered:!1,focused:!1,pressed:!1,waiting:!1};class hn extends d.Component{static getDerivedStateFromProps(e,t){return e.disabled?P({},pn,{focused:t.focused}):null}constructor(e){super(e),this.handleClick=e=>{const{onClick:t,beforeNav:n,safeWithNav:r}=this.props;this.enterClick||((t||n||r)&&(this.waitingForClick=!1),this.runCallbackAndMaybeNavigate(e))},this.handleMouseEnter=e=>{1===e.buttons?(this.dragging=!0,this.setState({pressed:!0})):this.waitingForClick||this.setState({hovered:!0})},this.handleMouseLeave=()=>{this.waitingForClick||(this.dragging=!1,this.setState({hovered:!1,pressed:!1,focused:!1}))},this.handleMouseDown=()=>{this.setState({pressed:!0})},this.handleMouseUp=e=>{this.dragging&&(this.dragging=!1,this.handleClick(e)),this.setState({pressed:!1,focused:!1})},this.handleDragStart=e=>{this.dragging=!0,e.preventDefault()},this.handleTouchStart=()=>{this.setState({pressed:!0})},this.handleTouchEnd=()=>{this.setState({pressed:!1}),this.waitingForClick=!0},this.handleTouchCancel=()=>{this.setState({pressed:!1}),this.waitingForClick=!0},this.handleKeyDown=e=>{const{onKeyDown:t,role:n}=this.props;t&&t(e);const r=e.which||e.keyCode,{triggerOnEnter:s,triggerOnSpace:a}=an(n);s&&r===ln||a&&r===cn?(e.preventDefault(),this.setState({pressed:!0})):s||r!==ln||(this.enterClick=!0)},this.handleKeyUp=e=>{const{onKeyUp:t,role:n}=this.props;t&&t(e);const r=e.which||e.keyCode,{triggerOnEnter:s,triggerOnSpace:a}=an(n);s&&r===ln||a&&r===cn?(this.setState({pressed:!1,focused:!0}),this.runCallbackAndMaybeNavigate(e)):s||r!==ln||(this.enterClick=!1)},this.handleFocus=e=>{this.setState({focused:!0})},this.handleBlur=e=>{this.setState({focused:!1,pressed:!1})},this.state=pn,this.waitingForClick=!1,this.enterClick=!1,this.dragging=!1}navigateOrReset(e){if(e){const{history:e,href:t,skipClientNav:n,target:r}=this.props;t&&("_blank"===r?(window.open(t,"_blank"),this.setState({waiting:!1})):e&&!n?(e.push(t),this.setState({waiting:!1})):window.location.assign(t))}else this.setState({waiting:!1})}handleSafeWithNav(e,t){const{skipClientNav:n,history:r}=this.props;return r&&!n||"_blank"===this.props.target?(e(),this.navigateOrReset(t),Promise.resolve()):(this.state.waiting||this.setState({waiting:!0}),e().then((()=>{this.state.waiting||this.setState({waiting:!0})})).catch((e=>{})).finally((()=>{this.navigateOrReset(t)})))}runCallbackAndMaybeNavigate(e){const{onClick:t,beforeNav:n,safeWithNav:r,href:s,type:a}=this.props;let i=!0,o=!0;if(t&&t(e),e.defaultPrevented&&(i=!1,o=!1),e.preventDefault(),!s&&"submit"===a&&o){let t=e.currentTarget;for(;t;){if(t instanceof window.HTMLFormElement){const e=new window.Event("submit",{cancelable:!0});t.dispatchEvent(e);break}t=t.parentElement}}if(n)this.setState({waiting:!0}),n().then((()=>r?this.handleSafeWithNav(r,i):this.navigateOrReset(i))).catch((()=>{}));else{if(r)return this.handleSafeWithNav(r,i);this.navigateOrReset(i)}}render(){const e=this.props.disabled?P({},on,{onFocus:this.handleFocus,onBlur:this.handleBlur}):{onClick:this.handleClick,onMouseEnter:this.handleMouseEnter,onMouseLeave:this.handleMouseLeave,onMouseDown:this.handleMouseDown,onMouseUp:this.handleMouseUp,onDragStart:this.handleDragStart,onTouchStart:this.handleTouchStart,onTouchEnd:this.handleTouchEnd,onTouchCancel:this.handleTouchCancel,onKeyDown:this.handleKeyDown,onKeyUp:this.handleKeyUp,onFocus:this.handleFocus,onBlur:this.handleBlur,tabIndex:0};e.rel=this.props.rel||("_blank"===this.props.target?"noopener noreferrer":void 0);const{children:t}=this.props;return t&&t(this.state,e)}}hn.defaultProps={disabled:!1};const un=e=>"string"==typeof e&&(!/^(https?:)?\/\//i.test(e)&&!/^([^#]*#[\w-]*|[\w\-.]+:)/.test(e)),dn=function(e){var t="withRouter("+(e.displayName||e.name)+")",n=function(n){var r=n.wrappedComponentRef,s=A(n,["wrappedComponentRef"]);return m.default.createElement(Be.Consumer,null,(function(n){return n||("production"!==process.env.NODE_ENV?W(!1,"You should not use <"+t+" /> outside a <Router>"):W(!1)),m.default.createElement(e,P({},s,n,{ref:r}))}))};return n.displayName=t,n.WrappedComponent=e,"production"!==process.env.NODE_ENV&&(n.propTypes={wrappedComponentRef:g.default.oneOfType([g.default.string,g.default.func,g.default.object])}),We(n,e)}(hn);function mn(e,t,n){return n&&!0!==t&&e&&un(e)?dn:hn}const fn=["href","onClick","skipClientNav","beforeNav","safeWithNav","style","target","testId","onKeyDown","onKeyUp","hideDefaultFocusRing","light","disabled"],gn=Pt("a"),vn=Pt("button"),yn=Pt(yt);class bn extends d.Component{constructor(...e){super(...e),this.getCorrectTag=(e,t,n)=>{const r=this.props.href&&!this.props.disabled,s=t&&!this.props.skipClientNav&&un(this.props.href||"");return r&&s&&this.props.href?d.createElement(yn,P({},n,{to:this.props.href,role:this.props.role,target:this.props.target||void 0,"aria-disabled":this.props.disabled?"true":void 0}),this.props.children(e)):r&&!s?d.createElement(gn,P({},n,{href:this.props.href,role:this.props.role,target:this.props.target||void 0,"aria-disabled":this.props.disabled?"true":void 0}),this.props.children(e)):d.createElement(vn,P({},n,{type:"button","aria-disabled":this.props.disabled}),this.props.children(e))}}renderClickableBehavior(e){const t=this.props,{href:n,onClick:r,skipClientNav:s,beforeNav:a,safeWithNav:i,style:o,target:l,testId:c,onKeyDown:p,onKeyUp:h,hideDefaultFocusRing:u,light:m,disabled:f}=t,g=A(t,fn),v=mn(n,s,e),y=e=>[En.reset,En.link,!u&&e.focused&&(m?En.focusedLight:En.focused),o];return a?d.createElement(v,{href:n,onClick:r,beforeNav:a,safeWithNav:i,onKeyDown:p,onKeyUp:h,disabled:f},((t,n)=>this.getCorrectTag(t,e,P({},g,{"data-test-id":c,style:y(t)},n)))):d.createElement(v,{href:n,onClick:r,safeWithNav:i,onKeyDown:p,onKeyUp:h,target:l,disabled:f},((t,n)=>this.getCorrectTag(t,e,P({},g,{"data-test-id":c,style:y(t)},n))))}render(){return d.createElement(Be.Consumer,null,(e=>this.renderClickableBehavior(e)))}}bn.defaultProps={light:!1,disabled:!1,"aria-label":""};const En=o.StyleSheet.create({reset:{border:"none",margin:0,padding:0,width:"auto",overflow:"visible",background:"transparent",textDecoration:"none",color:"inherit",font:"inherit",boxSizing:"border-box",touchAction:"manipulation",userSelect:"none",outline:"none",lineHeight:"normal",WebkitFontSmoothing:"inherit",MozOsxFontSmoothing:"inherit"},link:{cursor:"pointer"},focused:{outline:`solid 2px ${rn.blue}`},focusedLight:{outline:`solid 2px ${rn.white}`}}),{InlineIcon:wn}=e.components;class xn extends d.Component{render(){const{icon:e,onClick:t,title:n}=this.props;return d.createElement(bn,{className:"section-control-button simple-button simple-button--small ",onClick:e=>{e.preventDefault(),t()},role:"button",hideDefaultFocusRing:!0,"aria-label":n,style:Cn.button},(t=>d.createElement(wn,e)))}}const Cn=o.StyleSheet.create({button:{backgroundColor:rn.gold,margin:2,paddingRight:10,paddingLeft:10,paddingBottom:2}}),{InlineIcon:Sn,PropCheckBox:kn}=e.components,{iconChevronDown:Nn,iconChevronRight:Tn,iconTrash:_n}=e.icons,On=new RegExp("(\\[\\[☃ {id}\\]\\])".replace("{id}","[a-z-]+ [0-9]+"),"g"),Mn=/^\[\[([a-z-]+)$/,An=/(?:\n{2,}|^\n*)$/,Pn=/(\n*)$/,Dn=/^(\n*)/,In=e=>{let t=e.toString();return t.length>=5&&(t=t.replace(/(\d)(?=(\d{3})+$)/g,"$1{,}")),t};class Rn extends d.Component{constructor(){super(...arguments),C(this,"handleChange",(e=>{const t=e.currentTarget.value;""!==t&&this.props.onChange&&this.props.onChange(t)}))}shouldComponentUpdate(){return!1}render(){const t=e.Widgets.getPublicWidgets(),n=f.default.sortBy(f.default.keys(t),(e=>t[e].displayName));return d.createElement("select",{value:"",onChange:this.handleChange},d.createElement("option",{value:""},"Add a widget…"),d.createElement("option",{disabled:!0},"--"),f.default.map(n,(e=>d.createElement("option",{key:e,value:e},t[e].displayName))))}}const zn=t=>{const n=f.default.omit(t,e.WIDGET_PROP_BLACKLIST);return e.Widgets.upgradeWidgetInfoToLatestVersion(n)};class Ln extends d.Component{constructor(e){super(e),C(this,"_toggleWidget",(e=>{e.preventDefault(),this.setState({showWidget:!this.state.showWidget})})),C(this,"_handleWidgetChange",((e,t,n)=>{const r=Object.assign({},this.state.widgetInfo);r.options=Object.assign(this.refs.widget.serialize(),e),this.props.onChange(r,t,n)})),C(this,"_toggleStatic",(e=>{e.preventDefault();const t=Object.assign({},this.state.widgetInfo,{static:!this.state.widgetInfo.static});this.props.onChange(t)})),C(this,"_handleAlignmentChange",(e=>{const t=e.currentTarget.value,n=Object.assign({},this.state.widgetInfo);n.alignment=t,this.props.onChange(n)})),C(this,"getSaveWarnings",(()=>{const e=this.refs.widget.getSaveWarnings;return e?e():[]})),C(this,"serialize",(()=>{const e=this.state.widgetInfo;return{type:e.type,alignment:e.alignment,static:e.static,graded:e.graded,options:this.refs.widget.serialize(),version:e.version}})),this.state={showWidget:!1,widgetInfo:zn(e)}}UNSAFE_componentWillReceiveProps(e){this.setState({widgetInfo:zn(e)})}render(){const t=this.state.widgetInfo,n=e.Widgets.getEditor(t.type);let r;r=this.props.apiOptions.showAlignmentOptions?e.Widgets.getSupportedAlignments(t.type):["default"];const s=e.Widgets.supportsStaticMode(t.type),a="transformer"===t.type,i=d.createElement(kn,{label:"Graded:",graded:t.graded,onChange:this.props.onChange});return d.createElement("div",{className:"perseus-widget-editor"},d.createElement("div",{className:"perseus-widget-editor-title "+(this.state.showWidget?"open":"closed")},d.createElement("a",{className:"perseus-widget-editor-title-id",href:"#",onClick:this._toggleWidget},this.props.id,this.state.showWidget?d.createElement(Sn,Nn):d.createElement(Sn,Tn)),s&&d.createElement("input",{type:"button",onClick:this._toggleStatic,className:"simple-button--small",value:t.static?"Unset as static":"Set as static"}),r.length>1&&d.createElement("select",{className:"alignment",value:t.alignment,onChange:this._handleAlignmentChange},r.map((e=>d.createElement("option",{key:e},e)))),d.createElement(xn,{icon:_n,onClick:()=>{this.props.onRemove()},title:"Remove image widget"})),d.createElement("div",{className:"perseus-widget-editor-content "+(this.state.showWidget?"enter":"leave")},a&&i,n&&d.createElement(n,S({ref:"widget",onChange:this._handleWidgetChange,static:t.static,apiOptions:this.props.apiOptions},t.options))))}}const Fn=/!\[[^\]]*\]\(([^\s)]+)[^)]*\)/g;class Un extends d.Component{constructor(){super(...arguments),C(this,"lastUserValue",void 0),C(this,"deferredChange",void 0),C(this,"widgetIds",void 0),C(this,"state",{katex:void 0,showKatexErrors:!1,textAreaValue:this.props.content}),C(this,"getWidgetEditor",((t,n)=>{if(e.Widgets.getEditor(n))return d.createElement(Ln,S({key:t,ref:t,id:t,type:n,onChange:this._handleWidgetEditorChange.bind(this,t),onRemove:this._handleWidgetEditorRemove.bind(this,t),apiOptions:this.props.apiOptions},this.props.widgets[t]))})),C(this,"_handleWidgetEditorChange",((e,t,n,r)=>{const s=Object.assign({},this.props.widgets);s[e]=Object.assign({},s[e],t),this.props.onChange({widgets:s},n,r)})),C(this,"_handleWidgetEditorRemove",(e=>{const t=this.refs.textarea,n=new RegExp("(\\[\\[☃ {id}\\]\\])".replace("{id}",e),"gm");this.props.onChange({content:t.value.replace(n,"")})})),C(this,"_sizeImages",(t=>{const n=(r=t.content,f.default.map(function(e,t){const n=[];for(;;){const r=e.exec(t);if(!r)break;n.push(r)}return n}(Fn,r),(e=>e[1])));var r;const s=f.default.pick(t.images,n),a=f.default.filter(n,(e=>!s[e]));f.default.each(a,(n=>{e.Util.getImageSize(n,((e,r)=>{s[n]={width:e,height:r},t.onChange({images:f.default.clone(s)},null,!0)}))}))})),C(this,"handleDrop",(e=>{const{imageUploader:t}=this.props;let n=this.state.textAreaValue||"";const r=e.dataTransfer;if(!r||!t)return;const s=r.files;if(0===s.length){const e=r.getData("URL");if(e){const t=n+"\n\n";this.lastUserValue=this.props.content,this.props.onChange({content:t})}return}const a=this.state.textAreaValue;f.default(s).chain().map((function(e){if(!e.type.match("image.*"))return null;const t="☃ "+f.default.uniqueId("image_");return n+="\n\n",{file:e,sentinel:t}})).reject(f.default.isNull).tap((()=>{this.lastUserValue=a,this.props.onChange({content:n})})).each((e=>{t(e.file,(t=>{this.lastUserValue=a,this.props.onChange({content:this.state.textAreaValue.replace(e.sentinel,t)})}))}))})),C(this,"handleChange",(e=>{clearTimeout(this.deferredChange),this.setState({textAreaValue:e.currentTarget.value}),this.deferredChange=setTimeout((()=>{this.state.textAreaValue!==this.props.content&&this.props.onChange({content:this.state.textAreaValue})}),this.props.apiOptions.editorChangeDelay)})),C(this,"_handleKeyDown",(t=>{if("Tab"===t.key){const n=b.findDOMNode(this.refs.textarea),r=e.Util.textarea.getWordBeforeCursor(n),s=r.string.toLowerCase().match(Mn);if(null!=s){const n=s[1],a=e.Widgets.getAllWidgetTypes(),i=f.default.filter(a,(e=>e.substring(0,n.length)===n));if(1===i.length){const e=i[0];this._addWidgetToContent(this.props.content,[r.pos.start,r.pos.end+1],e)}t.preventDefault()}}})),C(this,"_maybeCopyWidgets",(t=>{const n=t.currentTarget,r=n.value.substring(n.selectionStart,n.selectionEnd),s=f.default.map(r.match(On),(t=>e.Util.rWidgetParts.exec(t)[1])),a=f.default.pick(this.serialize().widgets,s);localStorage.perseusLastCopiedText=r,localStorage.perseusLastCopiedWidgets=JSON.stringify(a),e.Log.log("Widgets copied: ".concat(localStorage.perseusLastCopiedWidgets))})),C(this,"_maybePasteWidgets",(t=>{const n=localStorage.perseusLastCopiedWidgets,r=localStorage.perseusLastCopiedText,s=t.originalEvent.clipboardData.getData("text");if(n&&r===s){t.preventDefault();const s=JSON.parse(n),a=this._safeWidgetNameMapping(s),i={};for(const[e,t]of Object.entries(s))i[a[e]]=t;const o=f.default.extend(i,this.props.widgets),l=r.replace(On,(t=>{const n=e.Util.rWidgetParts.exec(t),r=n[0],s=n[1];return r.replace(s,a[s])})),c=t.currentTarget,p=c.selectionStart,h=this.state.textAreaValue.substr(0,p)+l+this.state.textAreaValue.substr(c.selectionEnd);this.lastUserValue=this.state.textAreaValue,this.props.onChange({content:h,widgets:o},(()=>{const t=p+l.length;e.Util.textarea.moveCursor(c,t)}))}})),C(this,"_safeWidgetNameMapping",(e=>{const t=f.default.keys(e).map((e=>e.split(" "))),n=f.default.uniq(t.map((e=>e[0]))),r=f.default.keys(this.props.widgets).map((e=>e.split(" "))),s={};f.default.each(n,(e=>{s[e]=f.default.chain(r).filter((t=>t[0]===e)).map((e=>+e[1]+1)).max().value(),s[e]=Math.max(s[e],1)}));const a={};return f.default.each(t,(e=>{const t=e.join(" "),n=e[0];a[t]="".concat(n," ").concat(s[n]),s[n]++})),a})),C(this,"_addWidgetToContent",((t,n,r)=>{var s;const a=b.findDOMNode(this.refs.textarea),i=f.default.map(t.match(On),(t=>{const n=e.Util.rWidgetParts.exec(t);return[n[2],+n[3]]})),o=f.default.reduce(i,((e,t)=>{const[n,s]=t;return n===r?Math.max(s+1,e):e}),1),l=r+" "+o,c="[[☃ {id}]]".replace("{id}",l),p="block"===e.Widgets.getDefaultAlignment(r),h=t.slice(0,n[0]),u=t.slice(n[1]),d=(p?(e=>{if(!An.test(e)){const t=Pn.exec(e);if(t){const n=t[1];return e+"\n\n".slice(0,2-n.length)}}return e})(h):h)+c+(p?(e=>{const t=Dn.exec(e);if(!t)return e;const n=t[1];return"\n\n".slice(0,2-n.length)+e})(u):u),m=f.default.clone(this.props.widgets);m[l]={options:null===(s=e.Widgets.getEditor(r))||void 0===s?void 0:s.defaultProps,type:r,version:e.Widgets.getVersion(r)},this.lastUserValue=this.props.content,this.props.onChange({content:d,widgets:m},(function(){e.Util.textarea.moveCursor(a,d.length-u.length)}))})),C(this,"_addWidget",(e=>{const t=this.refs.textarea;this._addWidgetToContent(this.props.content,[t.selectionStart,t.selectionEnd],e),t.focus()})),C(this,"addTemplate",(t=>{const n=t.currentTarget.value;if(""===n)return;t.currentTarget.value="";let r,s=this.props.content;if(s=s.replace(/\n*$/,"\n\n"),"table"===n)r="header 1 | header 2 | header 3\n- | - | -\ndata 1 | data 2 | data 3\ndata 4 | data 5 | data 6\ndata 7 | data 8 | data 9";else if("titledTable"===n)r="|| **Table title** ||\nheader 1 | header 2 | header 3\n- | - | -\ndata 1 | data 2 | data 3\ndata 4 | data 5 | data 6\ndata 7 | data 8 | data 9";else if("alignment"===n)r="$\\begin{align} x+5 &= 30 \\\\\nx+5-5 &= 30-5 \\\\\nx &= 25 \\end{align}$";else if("piecewise"===n)r="$f(x) = \\begin{cases}\n7 & \\text{if }x=1 \\\\\nf(x-1)+5 & \\text{if }x > 1\n\\end{cases}$";else{if("allWidgets"!==n)throw new e.PerseusError("Invalid template type: "+n,e.Errors.InvalidInput,{metadata:{templateType:n}});r=e.Widgets.getAllWidgetTypes().map((t=>"[[".concat(e.Util.snowman," ").concat(t," 1]]"))).join("\n\n")}const a=s+r;this.lastUserValue=this.props.content,this.props.onChange({content:a},this.focusAndMoveToEnd)})),C(this,"getSaveWarnings",(()=>{const e=f.default.intersection(this.widgetIds,f.default.keys(this.refs));return f.default(e).chain().map((e=>{const t=this.refs[e].getSaveWarnings,n=t?t():[];return f.default.map(n,(t=>e+": "+t))})).flatten(!0).value()})),C(this,"focus",(()=>{const e=b.findDOMNode(this.refs.textarea);e&&e.focus()})),C(this,"focusAndMoveToEnd",(()=>{this.focus();const e=b.findDOMNode(this.refs.textarea);e&&(e.selectionStart=e.value.length,e.selectionEnd=e.value.length)})),C(this,"serialize",(e=>{const t={},n=f.default.intersection(this.widgetIds,f.default.keys(this.refs));return f.default.each(n,(e=>{t[e]=this.refs[e].serialize()})),e&&e.keepDeletedWidgets&&f.default.chain(this.props.widgets).keys().reject((e=>f.default.contains(n,e))).each((e=>{t[e]=this.props.widgets[e]})),{replace:this.props.replace,content:this.props.content,images:this.props.images,widgets:t}}))}componentDidMount(){this.lastUserValue=null,this._sizeImages(this.props),y.default(b.findDOMNode(this.refs.textarea)).on("copy cut",this._maybeCopyWidgets).on("paste",this._maybePasteWidgets),e.Dependencies.getDependencies().getKaTeX().then((e=>{this.setState({katex:e})}))}UNSAFE_componentWillReceiveProps(e){this.props.content!==e.content&&this.setState({textAreaValue:e.content})}componentDidUpdate(e){const t=b.findDOMNode(this.refs.textarea);null!==this.lastUserValue&&t&&(t.focus(),t.value=this.lastUserValue,t.selectionStart=0,t.select(0,e.content.length),!1===document.execCommand("insertText",!1,this.props.content)&&(t.value=this.props.content),this.lastUserValue=null),this.props.content!==e.content&&this._sizeImages(this.props)}componentWillUnmount(){clearTimeout(this.deferredChange)}render(){let t,n,r,s,a,i,o;const l=[];if(this.props.showWordCount){const t=e.PerseusMarkdown.characterCount(this.props.content),n=Math.floor(t/6);o=d.createElement("span",{className:"perseus-editor-word-count",title:"~"+In(n)+" words ("+In(t)+" characters)"},In(n))}const{katex:c}=this.state;if(this.props.widgetEnabled&&c){t=e.Util.split(this.props.content,On),n={},r=[];for(let s=0;s<t.length;s++)if(s%2==0){r.push(t[s]);const n=e.PerseusMarkdown.parse(t[s]);e.PerseusMarkdown.traverseContent(n,(t=>{if("math"===t.type||"blockMath"===t.type){const n=e.preprocessTex(t.content);try{c.renderToString(n,{colorIsTextColor:!0})}catch(e){l.push({math:n,message:e.message})}}}))}else{const a=e.Util.rWidgetParts.exec(t[s]);if(null!=a){const e=a[1],i=a[2],o=e in n;n[e]=this.getWidgetEditor(e,i);const l=o||!n[e]?"error ":"",c=o?s:e;r.push(d.createElement("b",{className:l,key:c},t[s]))}}this.widgetIds=f.default.keys(n),s=d.createElement(Rn,{ref:"widgetSelect",onChange:this._addWidget});const p="Insert template…";if(a=d.createElement("select",{onChange:this.addTemplate},d.createElement("option",{value:""},p),d.createElement("option",{disabled:!0},"--"),d.createElement("option",{value:"table"},"Table"),d.createElement("option",{value:"titledTable"},"Titled table"),d.createElement("option",{value:"alignment"},"Aligned equations"),d.createElement("option",{value:"piecewise"},"Piecewise function"),d.createElement("option",{disabled:!0},"--"),d.createElement("option",{value:"allWidgets"},"All widgets (for testing)")),!this.props.immutableWidgets){const e=Object.values(n);i=d.createElement("div",{className:"perseus-editor-widgets"},d.createElement("div",{className:"perseus-editor-widgets-selectors"},s,a,o),e),o=null}}else r=[this.props.content];r.push(d.createElement("br",{key:"end"}));const p=[d.createElement("div",{className:"perseus-textarea-underlay",ref:"underlay",key:"underlay"},r),d.createElement("textarea",{ref:"textarea",key:"textarea",onChange:this.handleChange,onKeyDown:this._handleKeyDown,placeholder:this.props.placeholder,disabled:this.props.disabled,value:this.state.textAreaValue})];let h;h=this.props.imageUploader?d.createElement(_,{onDrop:this.handleDrop,className:"perseus-textarea-pair"},p):d.createElement("div",{className:"perseus-textarea-pair"},p);const u=0===this.props.content.replace(/\[\[\u2603 (([a-z-]+) ([0-9]+))\]\]/g,"").trim().length,m=!/\[\[\u2603 (([a-z-]+) ([0-9]+))\]\]/g.test(this.props.content),g={borderTop:"none",padding:4,backgroundColor:"pink"};return d.createElement("div",{className:"perseus-single-editor "+(this.props.className||"")},h,l.length>0&&d.createElement(O,{errorList:l}),this.props.warnNoPrompt&&u&&d.createElement("div",{style:g},"Graded Groups should contain a prompt"),this.props.warnNoWidgets&&m&&d.createElement("div",{style:g},"Graded Groups should contain at least one widget"),o,i)}}C(Un,"defaultProps",{content:"",placeholder:"",widgets:{},images:{},disabled:!1,widgetEnabled:!0,immutableWidgets:!1,showWordCount:!1,warnNoPrompt:!1,warnNoWidgets:!1});let qn=0;const Wn={},Vn={};window.iframeDataStore={},window.addEventListener("message",(t=>{if("string"==typeof t.data){const e=Wn[t.data];e&&e()}else t.data.id&&(void 0!==t.data.height?Vn[t.data.id](t.data.height):t.data.lintWarnings&&e.Log.log("LINTER REPORT",{lintWarnings:JSON.stringify(t.data.lintWarnings)}))}));const jn=v.default({displayName:"IframeContentRenderer",propTypes:{content:g.default.string.isRequired,datasetKey:g.default.any,datasetValue:g.default.any,seamless:g.default.bool},componentDidMount:function(){this._isMounted=!0,this.iframeID=qn,qn++,this._prepareFrame(),Wn[this.iframeID]=()=>{this.sendNewData(this._lastData)},Vn[this.iframeID]=e=>{this._lastHeight=e,this._isMounted&&this.props.seamless&&(this.refs.container.style.height=e+"px")}},shouldComponentUpdate:function(e){return e.content!==this.props.content||e.datasetValue!==this.props.datasetValue||e.seamless!==this.props.seamless},componentDidUpdate:function(e){this.props.seamless?this.refs.container.style.height=this._lastHeight+"px":this.refs.container.style.height="100%",e.content===this.props.content&&e.datasetValue===this.props.datasetValue||this._prepareFrame()},componentWillUnmount:function(){Wn[this.iframeID]=null,Vn[this.iframeID]=null,this._isMounted=!1},_prepareFrame:function(){this._frame&&this.refs.container.removeChild(this._frame),this._frame=document.createElement("iframe"),this._frame.style.width="100%",this._frame.style.height="100%",this.props.datasetKey&&(this._frame.dataset[this.props.datasetKey]=this.props.datasetValue),this._frame.dataset.id=this.iframeID,this.props.seamless&&(this._frame.dataset.lintGutter="true"),this._frame.onload=()=>{this._frame.onload=null,setTimeout((()=>{this._frame.contentWindow.document.open(),this._frame.contentWindow.document.write(this.props.content),this._frame.contentWindow.document.close()}))},this.refs.container.appendChild(this._frame)},sendNewData:function(e){this._isMounted&&e&&this._frame.contentWindow&&(this._lastData=e,window.iframeDataStore[this.iframeID]=e,this._frame.contentWindow.postMessage(this.iframeID,"*"))},render:function(){return d.createElement("div",{ref:"container",style:{width:"100%",height:"100%"}})}}),{HUD:Bn,InlineIcon:$n}=e.components,{iconCircleArrowDown:Hn,iconCircleArrowUp:Gn,iconPlus:Yn,iconTrash:Kn}=e.icons;class Jn extends d.Component{constructor(){super(...arguments),C(this,"state",{highlightLint:!0}),C(this,"_handleJsonChange",(e=>{this.props.onChange({json:e})})),C(this,"_handleEditorChange",((e,t)=>{const n=f.default.clone(this._sections());n[e]=f.default.extend({},n[e],t),this.props.onChange({json:n})}))}componentDidMount(){this._updatePreviewFrames()}componentDidUpdate(){this._updatePreviewFrames()}_updatePreviewFrames(){"preview"===this.props.mode?this.refs["frame-all"].sendNewData({type:"article-all",data:this._sections().map(((e,t)=>this._apiOptionsForSection(e,t)))}):"edit"===this.props.mode&&this._sections().forEach(((e,t)=>{this.refs["frame-"+t].sendNewData({type:"article",data:this._apiOptionsForSection(e,t)})}))}_apiOptionsForSection(t,n){const r=this.refs["editor".concat(n)];return{apiOptions:{...e.ApiOptions.defaults,...this.props.apiOptions,showAlignmentOptions:!0,isArticle:!0},json:t,useNewStyles:this.props.useNewStyles,linterContext:{contentType:"article",highlightLint:this.state.highlightLint,paths:this.props.contentPaths},legacyPerseusLint:r?r.getSaveWarnings():[]}}_sections(){return Array.isArray(this.props.json)?this.props.json:[this.props.json]}_renderEditor(){const{imageUploader:t,sectionImageUploadGenerator:n}=this.props,r={...e.ApiOptions.defaults,...this.props.apiOptions,showAlignmentOptions:!0,isArticle:!0},{KatexProvider:s}=e.Dependencies.getDependencies(),a=this._sections();return d.createElement("div",{className:"perseus-editor-table"},a.map(((e,i)=>[d.createElement("div",{className:"perseus-editor-row",key:i},d.createElement("div",{className:"perseus-editor-left-cell"},d.createElement("div",{className:"pod-title"},"Section ",i+1,d.createElement("div",{style:{display:"inline-block",float:"right"}},n(i),d.createElement(xn,{icon:Yn,onClick:()=>{this._handleAddSectionAfter(i)},title:"Add a new section after this one"}),i+1<a.length&&d.createElement(xn,{icon:Hn,onClick:()=>{this._handleMoveSectionLater(i)},title:"Move this section down"}),i>0&&d.createElement(xn,{icon:Gn,onClick:()=>{this._handleMoveSectionEarlier(i)},title:"Move this section up"}),d.createElement(xn,{icon:Kn,onClick:()=>{confirm("Are you sure you want to delete section "+(i+1)+"?")&&this._handleRemoveSection(i)},title:"Delete this section"}))),d.createElement(s,null,d.createElement(Un,S({},e,{apiOptions:r,imageUploader:t,onChange:f.default.partial(this._handleEditorChange,i),placeholder:"Type your section text here...",ref:"editor"+i})))),d.createElement("div",{className:"editor-preview"},this._renderIframePreview(i,!0)))])),this._renderAddSection(),this._renderLinterHUD())}_renderAddSection(){return d.createElement("div",{className:"perseus-editor-row"},d.createElement("div",{className:"perseus-editor-left-cell"},d.createElement("a",{href:"#",className:"simple-button orange",onClick:()=>{this._handleAddSectionAfter(this._sections().length-1)}},d.createElement($n,Yn)," Add a section")))}_renderLinterHUD(){return d.createElement(Bn,{message:"Style warnings",enabled:this.state.highlightLint,onClick:()=>{this.setState({highlightLint:!this.state.highlightLint})}})}_renderIframePreview(e,t){const n="phone"===this.props.screen||"tablet"===this.props.screen;return d.createElement(N,{deviceType:this.props.screen,nochrome:t},d.createElement(jn,{ref:"frame-"+e,key:this.props.screen,content:this.props.frameSource,datasetKey:"mobile",datasetValue:n,seamless:t}))}_renderPreviewMode(){return d.createElement("div",{className:"standalone-preview"},this._renderIframePreview("all",!1))}_handleMoveSectionEarlier(e){if(0===e)return;const t=f.default.clone(this._sections()),n=t[e];t.splice(e,1),t.splice(e-1,0,n),this.props.onChange({json:t})}_handleMoveSectionLater(e){const t=f.default.clone(this._sections());if(e+1===t.length)return;const n=t[e];t.splice(e,1),t.splice(e+1,0,n),this.props.onChange({json:t})}_handleAddSectionAfter(e){const t=f.default.clone(this.serialize()),n=e>=0?{widgets:t[e].widgets}:{};t.splice(e+1,0,n),this.props.onChange({json:t})}_handleRemoveSection(e){const t=f.default.clone(this._sections());t.splice(e,1),this.props.onChange({json:t})}serialize(){if("edit"===this.props.mode)return this._sections().map(((e,t)=>this.refs["editor"+t].serialize()));if("preview"===this.props.mode||"json"===this.props.mode)return this.props.json;throw new e.PerseusError("Could not serialize; mode "+this.props.mode+" not found",e.Errors.Internal)}getSaveWarnings(){if("edit"!==this.props.mode)throw new e.PerseusError("Can only get save warnings in edit mode.",e.Errors.NotAllowed);return this._sections().map(((e,t)=>this.refs["editor"+t].getSaveWarnings()))}render(){return d.createElement("div",{className:"framework-perseus perseus-article-editor"},"edit"===this.props.mode&&this._renderEditor(),"preview"===this.props.mode&&this._renderPreviewMode(),"json"===this.props.mode&&d.createElement("div",{className:"json-editor"},d.createElement("div",{className:"json-editor-warning"},d.createElement("span",null,"Warning: Editing in this mode can lead to broken articles!")),d.createElement(T,{multiLine:!0,onChange:this._handleJsonChange,value:this.props.json})))}}C(Jn,"defaultProps",{contentPaths:[],json:[{}],mode:"edit",screen:"desktop",sectionImageUploadGenerator:()=>d.createElement("span",null),useNewStyles:!1});const{ButtonGroup:Xn,InlineIcon:Zn}=e.components,{devices:Qn}=e.constants,{iconDesktop:er,iconMobilePhone:tr,iconTablet:nr}=e.icons;class rr extends d.Component{constructor(){super(...arguments),C(this,"handleChange",(e=>{this.props.onViewportSizeChanged(e)}))}render(){const e=d.createElement("span",null,d.createElement(Zn,tr)," Phone"),t=d.createElement("span",null,d.createElement(Zn,nr)," Tablet"),n=d.createElement("span",null,d.createElement(Zn,er)," Desktop");return d.createElement("span",{className:"viewport-resizer"},"Viewport:"," ",d.createElement(Xn,{value:this.props.deviceType,allowEmpty:!1,buttons:[{value:Qn.PHONE,content:e},{value:Qn.TABLET,content:t},{value:Qn.DESKTOP,content:n}],onChange:this.handleChange}))}}C(rr,"propTypes",{deviceType:g.default.string.isRequired,onViewportSizeChanged:g.default.func.isRequired});var sr={exports:{}};!function(e){var t=function(){function e(e){return{newPos:e.newPos,components:e.components.slice(0)}}function t(e){for(var t=[],n=0;n<e.length;n++)e[n]&&t.push(e[n]);return t}function n(e){var t=e;return t=(t=(t=(t=t.replace(/&/g,"&")).replace(/</g,"<")).replace(/>/g,">")).replace(/"/g,""")}var r=function(e){this.ignoreWhitespace=e};r.prototype={diff:function(t,n){if(n===t)return[{value:n}];if(!n)return[{value:t,removed:!0}];if(!t)return[{value:n,added:!0}];n=this.tokenize(n),t=this.tokenize(t);var r=n.length,s=t.length,a=r+s,i=[{newPos:-1,components:[]}],o=this.extractCommon(i[0],n,t,0);if(i[0].newPos+1>=r&&o+1>=s)return i[0].components;for(var l=1;l<=a;l++)for(var c=-1*l;c<=l;c+=2){var p,h=i[c-1],u=i[c+1];o=(u?u.newPos:0)-c,h&&(i[c-1]=void 0);var d=h&&h.newPos+1<r,m=u&&0<=o&&o<s;if(d||m){!d||m&&h.newPos<u.newPos?(p=e(u),this.pushComponent(p.components,t[o],void 0,!0)):((p=e(h)).newPos++,this.pushComponent(p.components,n[p.newPos],!0,void 0));o=this.extractCommon(p,n,t,c);if(p.newPos+1>=r&&o+1>=s)return p.components;i[c]=p}else i[c]=void 0}},pushComponent:function(e,t,n,r){var s=e[e.length-1];s&&s.added===n&&s.removed===r?e[e.length-1]={value:this.join(s.value,t),added:n,removed:r}:e.push({value:t,added:n,removed:r})},extractCommon:function(e,t,n,r){for(var s=t.length,a=n.length,i=e.newPos,o=i-r;i+1<s&&o+1<a&&this.equals(t[i+1],n[o+1]);)i++,o++,this.pushComponent(e.components,t[i],void 0,void 0);return e.newPos=i,o},equals:function(e,t){var n=/\S/;return!(!this.ignoreWhitespace||n.test(e)||n.test(t))||e===t},join:function(e,t){return e+t},tokenize:function(e){return e}};var s=new r,a=new r(!0),i=new r;a.tokenize=i.tokenize=function(e){return t(e.split(/(\s+|\b)/))};var o=new r(!0);o.tokenize=function(e){return t(e.split(/([{}:;,]|\s+)/))};var l=new r;return l.tokenize=function(e){for(var t=[],n=e.split(/^/m),r=0;r<n.length;r++){var s=n[r],a=n[r-1];"\n"==s&&a&&"\r"===a[a.length-1]?t[t.length-1]+="\n":s&&t.push(s)}return t},{Diff:r,diffChars:function(e,t){return s.diff(e,t)},diffWords:function(e,t){return a.diff(e,t)},diffWordsWithSpace:function(e,t){return i.diff(e,t)},diffLines:function(e,t){return l.diff(e,t)},diffCss:function(e,t){return o.diff(e,t)},createPatch:function(e,t,n,r,s){var a=[];a.push("Index: "+e),a.push("==================================================================="),a.push("--- "+e+(void 0===r?"":"\t"+r)),a.push("+++ "+e+(void 0===s?"":"\t"+s));var i=l.diff(t,n);function o(e){return e.map((function(e){return" "+e}))}function c(e,t,n){var r=i[i.length-2],s=t===i.length-2,a=t===i.length-3&&(n.added!==r.added||n.removed!==r.removed);/\n$/.test(n.value)||!s&&!a||e.push("\")}i[i.length-1].value||i.pop(),i.push({value:"",lines:[]});for(var p=0,h=0,u=[],d=1,m=1,f=0;f<i.length;f++){var g=i[f],v=g.lines||g.value.replace(/\n$/,"").split("\n");if(g.lines=v,g.added||g.removed){if(!p){var y=i[f-1];p=d,h=m,y&&(p-=(u=o(y.lines.slice(-4))).length,h-=u.length)}u.push.apply(u,v.map((function(e){return(g.added?"+":"-")+e}))),c(u,f,g),g.added?m+=v.length:d+=v.length}else{if(p)if(v.length<=8&&f<i.length-2)u.push.apply(u,o(v));else{var b=Math.min(v.length,4);a.push("@@ -"+p+","+(d-p+b)+" +"+h+","+(m-h+b)+" @@"),a.push.apply(a,u),a.push.apply(a,o(v.slice(0,b))),v.length<=4&&c(a,f,g),p=0,h=0,u=[]}d+=v.length,m+=v.length}}return a.join("\n")+"\n"},applyPatch:function(e,t){for(var n=t.split("\n"),r=[],s=!1,a=!1,i="I"===n[0][0]?4:0;i<n.length;i++)if("@"===n[i][0]){var o=n[i].split(/@@ -(\d+),(\d+) \+(\d+),(\d+) @@/);r.unshift({start:o[3],oldlength:o[2],oldlines:[],newlength:o[4],newlines:[]})}else"+"===n[i][0]?r[0].newlines.push(n[i].substr(1)):"-"===n[i][0]?r[0].oldlines.push(n[i].substr(1)):" "===n[i][0]?(r[0].newlines.push(n[i].substr(1)),r[0].oldlines.push(n[i].substr(1))):"\\"===n[i][0]&&("+"===n[i-1][0]?s=!0:"-"===n[i-1][0]&&(a=!0));var l=e.split("\n");for(i=r.length-1;i>=0;i--){for(var c=r[i],p=0;p<c.oldlength;p++)if(l[c.start-1+p]!==c.oldlines[p])return!1;Array.prototype.splice.apply(l,[c.start-1,+c.oldlength].concat(c.newlines))}if(s)for(;!l[l.length-1];)l.pop();else a&&l.push("");return l.join("\n")},convertChangesToXML:function(e){for(var t=[],r=0;r<e.length;r++){var s=e[r];s.added?t.push("<ins>"):s.removed&&t.push("<del>"),t.push(n(s.value)),s.added?t.push("</ins>"):s.removed&&t.push("</del>")}return t.join("")},convertChangesToDMP:function(e){for(var t,n=[],r=0;r<e.length;r++)t=e[r],n.push([t.added?1:t.removed?-1:0,t.value]);return n}}}();e.exports=t}(sr);var ar=sr.exports;const ir=function(e){return e.added?"added":e.removed?"removed":"unchanged"},or=e=>f.default.map(e.value,(t=>({value:t,status:ir(e)}))),lr=new ar.Diff;lr.tokenize=e=>f.default.map(e,(e=>[e])),lr.join=(e,t)=>e.concat(t),lr.equals=f.default.isEqual;const cr=e=>{return t=e,n=or,f.default.flatten(f.default.map(t,n),!0);var t,n},{SvgImage:pr}=e.components,hr=/http.*?\.png|web\+graphie[^)]*/g,ur=function(e){return e.match(hr)||[]},dr=function(e,t,n){return e.added?t:e.removed?n:""};class mr extends d.Component{render(){return d.createElement("div",null,f.default.map(this.props.images,((e,t)=>{const n=w.default({image:!0,"image-unchanged":"unchanged"===e.status,"image-added":"added"===e.status,"image-removed":"removed"===e.status});return d.createElement("div",{key:t},d.createElement("div",{className:n},d.createElement(pr,{src:e.value,title:e.value})))})))}}C(mr,"propTypes",{images:g.default.arrayOf(g.default.shape({})).isRequired});class fr extends d.Component{constructor(){super(...arguments),C(this,"state",{collapsed:this.props.before===this.props.after}),C(this,"handleExpand",(()=>{this.setState({collapsed:!1})}))}UNSAFE_componentWillReceiveProps(e){this.setState({collapsed:e.before===e.after})}render(){const e=function(e){const t=[];let n=[];return f.default.each(e,(e=>{const r=e.value.split("\n");f.default.each(r,((r,s)=>{s>0&&(t.push(n),n=[]);const a=f.default.extend({},e,{value:r});n.push(a)}))})),n.length&&t.push(n),t}(ar.diffWords(this.props.before,this.props.after)),t=function(e,t){const n=lr.diff(e,t),r=cr(n);return{before:f.default.filter(r,(e=>"added"!==e.status)),after:f.default.filter(r,(e=>"removed"!==e.status))}}(ur(this.props.before),ur(this.props.after)),n=f.default.map(e,(e=>{const t={};return t.before=f.default(e).map((function(e,t){return d.createElement("span",{key:t,className:dr(e,"not-present","removed dark")},e.value)})),t.after=f.default(e).map((function(e,t){return d.createElement("span",{key:t,className:dr(e,"added dark","not-present")},e.value)})),t})),r=w.default({"diff-row":!0,collapsed:this.state.collapsed});return d.createElement("div",null,d.createElement("div",{className:"diff-header"},this.props.title),d.createElement("div",{className:"diff-header"},this.props.title),d.createElement("div",{className:"diff-body ui-helper-clearfix"},f.default.map(["before","after"],((e,r)=>d.createElement("div",{className:"diff-row "+e,key:r},!this.state.collapsed&&f.default.map(n,((t,n)=>{const r=t[e].length>1,s=w.default({"diff-line":!0,added:"after"===e&&r,removed:"before"===e&&r});return d.createElement("div",{className:s,key:n},t[e])})),!this.state.collapsed&&d.createElement(mr,{images:t[e]}))))),f.default.map(["before","after"],((e,t)=>d.createElement("div",{className:r+" "+e,key:t,onClick:this.handleExpand},this.state.collapsed&&d.createElement("span",null,d.createElement("span",{className:"expand-button"}," ","[ show unmodified ]"," "))))))}}C(fr,"propTypes",{after:g.default.string,before:g.default.string,title:g.default.string.isRequired}),C(fr,"defaultProps",{after:"",before:""});const gr=function(e,t,n){return"object"==typeof e||"object"==typeof t?function(e,t,n){const r=f.default.isObject(e)?f.default(e).keys():[],s=f.default.isObject(t)?f.default(t).keys():[],a=f.default.union(r,s),i=f.default.map(a,(function(n){return gr((e||{})[n],(t||{})[n],n)}));let o;o=void 0===e?"added":void 0===t?"removed":f.default.any(i,(function(e){return"unchanged"!==e.status}))?"changed":"unchanged";return{after:"",before:"",children:i,key:n,status:o}}(e,t,n):function(e,t,n){let r;return r=e===t?"unchanged":void 0===e?"added":void 0===t?"removed":"changed",{after:JSON.stringify(t),before:JSON.stringify(e),children:[],key:n,status:r}}(e,t,n)},{SvgImage:vr}=e.components,yr=function(e){return 20*(e-1)};class br extends d.Component{render(){const e=w.default(this.props.className,{"diff-row":!0,before:"before"===this.props.side,after:"after"===this.props.side});return d.createElement("div",{className:e},d.createElement("div",{style:{paddingLeft:yr(this.props.depth)}},this.props.showKey&&this.props.propKey+": ",d.createElement("span",{className:"inner-value dark "+this.props.className},this.props.value)))}}C(br,"propTypes",{className:g.default.string.isRequired,depth:g.default.number.isRequired,propKey:g.default.string.isRequired,showKey:g.default.bool.isRequired,side:g.default.oneOf(["before","after"]).isRequired,value:g.default.string});class Er extends d.Component{render(){const e=this;return d.createElement("div",{onClick:e.props.onClick,style:{clear:"both"}},f.default.map(["before","after"],(function(t){return d.createElement("div",{className:"diff-row collapsed "+t,key:t},d.createElement("div",{style:{paddingLeft:yr(e.props.depth)}},d.createElement("span",null," [ show unmodified ] ")))})))}}C(Er,"propTypes",{depth:g.default.number,onClick:g.default.func.isRequired}),C(Er,"defaultProps",{depth:0});class wr extends d.Component{constructor(){super(...arguments),C(this,"state",{expanded:this.props.expanded}),C(this,"expand",(()=>{this.setState({expanded:!0})}))}render(){const e=this.props.entry,t="removed"===e.status,n="added"===e.status,r="changed"===e.status,s=e.children.length>0,a=w.default({removed:t||r&&!s,dark:t,"blank-space":n}),i=w.default({added:n||r&&!s,dark:n,"blank-space":t});let o;o=this.state.expanded?e.children:f.default(e.children).select((function(e){return"unchanged"!==e.status}));let l=o.length<e.children.length;e.children.length===o.length+1&&(o=e.children,l=!1);const c=this;return d.createElement("div",null,e.key&&d.createElement("div",{style:{clear:"both"}},d.createElement(br,{side:"before",className:a,depth:this.props.depth,propKey:e.key,showKey:!n,value:e.before}),d.createElement(br,{side:"after",className:i,depth:this.props.depth,propKey:e.key,showKey:!t,value:e.after})),f.default.map(o,(function(e){return d.createElement(wr,{key:e.key,depth:c.props.depth+1,entry:e,expanded:c.state.expanded})})),l&&d.createElement(Er,{depth:this.props.depth+1,onClick:this.expand}))}}C(wr,"propTypes",{depth:g.default.number,entry:g.default.shape({after:g.default.string,before:g.default.string,children:g.default.arrayOf(g.default.any),key:g.default.string}),expanded:g.default.bool}),C(wr,"defaultProps",{depth:0});class xr extends d.Component{render(){const{before:e,after:t}=this.props,n=e.options&&e.options.backgroundImage?e.options.backgroundImage.url:"",r=t.options&&t.options.backgroundImage?t.options.backgroundImage.url:"";return d.createElement("div",null,d.createElement("div",{className:"diff-row before"},n&&d.createElement("div",{className:w.default({image:!0,"image-unchanged":n===r,"image-removed":n!==r})},d.createElement(vr,{src:n,title:n}))),d.createElement("div",{className:"diff-row after"},r&&d.createElement("div",{className:w.default({image:!0,"image-unchanged":n===r,"image-added":n!==r})},d.createElement(vr,{src:r,title:r}))))}}C(xr,"propTypes",{after:g.default.shape({options:g.default.objectOf(g.default.any)}).isRequired,before:g.default.shape({options:g.default.objectOf(g.default.any)}).isRequired});class Cr extends d.Component{render(){const{after:e,before:t,title:n,type:r}=this.props,s=gr(t,e);return d.createElement("div",null,d.createElement("div",{className:"diff-header"},n),d.createElement("div",{className:"diff-header"},n),d.createElement("div",{className:"diff-body ui-helper-clearfix"},"image"===r&&d.createElement(xr,{before:t,after:e}),d.createElement(wr,{entry:s})))}}C(Cr,"propTypes",{after:g.default.shape({options:g.default.objectOf(g.default.any)}),before:g.default.shape({options:g.default.objectOf(g.default.any)}),title:g.default.string.isRequired,type:g.default.string}),C(Cr,"defaultProps",{after:{},before:{},type:""});const Sr=function(t,n){const{alignment:r,graded:s,options:a,type:i}=t||{},o={options:a};var l;(n&&e.Widgets.getSupportedAlignments(i).length>1&&(o.alignment=r),"transformer"===i&&(o.graded=s),e.Widgets.supportsStaticMode(i))&&(o.static=null!==(l=null==t?void 0:t.static)&&void 0!==l?l:void 0);return o};class kr extends d.Component{render(){var e,t;const{after:n,before:r,showAlignmentOptions:s,showSeparator:a,title:i}=this.props;let o,l;(r.content||n.content)&&(o=d.createElement(fr,{before:r.content,after:n.content,title:i}));const c=Object.keys(null!==(e=r.widgets)&&void 0!==e?e:{}).filter((e=>r.content.includes(e))),p=Object.keys(null!==(t=n.widgets)&&void 0!==t?t:{}).filter((e=>n.content.includes(e)));if(c.length||p.length){l=f.default.union(c,p).map((e=>{var t,a,i,o,l,c;return d.createElement(Cr,{before:Sr(null===(t=r.widgets)||void 0===t?void 0:t[e],s),after:Sr(null===(a=n.widgets)||void 0===a?void 0:a[e],s),title:e,type:(null!==(i=null===(o=r.widgets)||void 0===o?void 0:o[e])&&void 0!==i?i:{}).type||(null!==(l=null===(c=n.widgets)||void 0===c?void 0:c[e])&&void 0!==l?l:{}).type,key:e})}))}return d.createElement("div",null,o,l,a&&d.createElement("div",{className:"diff-separator"}))}}C(kr,"defaultProps",{after:{content:"",images:{},widgets:{}},before:{content:"",images:{},widgets:{}},showAlignmentOptions:!1,showSeparator:!1});const Nr=g.default.shape({content:g.default.string,images:g.default.objectOf(g.default.any),widgets:g.default.objectOf(g.default.any)});class Tr extends d.Component{constructor(){super(...arguments),C(this,"state",Tr._stateFromProps(this.props))}UNSAFE_componentWillReceiveProps(e){this.setState(Tr._stateFromProps(e))}render(){const{before:e,after:t}=this.state,n=Math.max(e.length,t.length),r=f.default.times(n,(r=>d.createElement(kr,{before:r<e.length?e[r]:void 0,after:r<t.length?t[r]:void 0,title:"Section ".concat(r+1),showAlignmentOptions:!0,showSeparator:r<n-1,key:r})));return d.createElement("div",{className:"framework-perseus"},r)}}C(Tr,"propTypes",{after:g.default.oneOfType([Nr,g.default.arrayOf(Nr)]).isRequired,before:g.default.oneOfType([Nr,g.default.arrayOf(Nr)]).isRequired}),C(Tr,"_stateFromProps",(e=>{const{before:t,after:n}=e;return{before:Array.isArray(t)?t:[t],after:Array.isArray(n)?n:[n]}}));const _r=g.default.shape({question:g.default.shape({}).isRequired,answerArea:g.default.shape({}).isRequired,hints:g.default.arrayOf(g.default.any).isRequired});class Or extends d.Component{render(){const{before:e,after:t}=this.props,n=Math.max(e.hints.length,t.hints.length),r=d.createElement(kr,{before:e.question,after:t.question,title:"Question",showAlignmentOptions:!1,showSeparator:!0}),s=d.createElement(Cr,{before:e.answerArea,after:t.answerArea,title:"Question extras"}),a=f.default.times(n,(function(r){return d.createElement(kr,{before:r<e.hints.length?e.hints[r]:void 0,after:r<t.hints.length?t.hints[r]:void 0,title:"Hint ".concat(r+1),showAlignmentOptions:!1,showSeparator:r<n-1,key:r})}));return d.createElement("div",{className:"framework-perseus"},r,s,a&&d.createElement("div",{className:"diff-separator"}),a)}}C(Or,"propTypes",{after:_r.isRequired,before:_r.isRequired});class Mr extends d.Component{render(){const{afterOnly:e,beforeOnly:t,intersection:n,showSeparator:r}=this.props,s=n.concat(t).join("\n")+"\n",a=n.concat(e).join("\n")+"\n";return d.createElement("div",null,d.createElement(fr,{before:s,after:a,title:this.props.title}),r&&d.createElement("div",{className:"diff-separator"}))}}function Ar(e,t){let n=!0;for(let r=0;r<t.length;r++){if(r>=e.length)return!1;t[r]!==e[r]&&(n=!1)}return n}function Pr(e,t){if(e.length!==t.length)return!1;for(let n=0,r=e.length;n<r;n++)if(e[n]!==t[n])return!1;return!0}C(Mr,"defaultProps",{afterOnly:[],beforeOnly:[],showSeparator:!1,title:"Question tags"});class Dr extends d.Component{static generateCompletePathsList(e,t,n,r,s){if("content"===r.type||"hint"===r.type||"tags"===r.type){const r=e.length>0&&Pr(s,e[0][1]),a=t.length>0&&Pr(s,t[0][1]);r&&a?(n.push(s),e.splice(0,1),t.splice(0,1)):r?(n.push(s),e.splice(0,1)):a&&(n.push(s),t.splice(0,1))}else if("array"===r.type){let a=0,i=s.concat(a);for(;e.length>0&&Ar(e[0][1],i)||t.length>0&&Ar(t[0][1],i);)Dr.generateCompletePathsList(e,t,n,r.elementShape,i),a++,i=s.concat(a)}else if("object"===r.type){const a=Object.keys(r.shape);for(let i=0;i<a.length;i++){const o=s.concat([a[i]]);Dr.generateCompletePathsList(e,t,n,r.shape[a[i]],o)}}}render(){const{before:t,after:n,shape:r,tags:s}=this.props,a=[],i=[];e.buildMapper().setContentMapper(((e,t,n)=>a.push([e,n]))).setHintMapper(((e,t,n)=>a.push([e,n]))).setTagsMapper(((e,t,n)=>a.push([e,n]))).mapTree(e.itemToTree(t),r),e.buildMapper().setContentMapper(((e,t,n)=>i.push([e,n]))).setHintMapper(((e,t,n)=>i.push([e,n]))).setTagsMapper(((e,t,n)=>i.push([e,n]))).mapTree(e.itemToTree(n),r);const o=a.slice(),l=i.slice(),c=[];Dr.generateCompletePathsList(o,l,c,r,[]);const p=c.length,h=c.map(((t,n)=>{const r="tags"===t[t.length-1],o=function(e){const t=[];for(let n=0;n<e.length;n++)"number"==typeof e[n]?t.push((e[n]+1).toString()+":"):t.push(e[n]);return t.join(" ")}(t);let l=a.find((e=>Pr(e[1],t))),c=i.find((e=>Pr(e[1],t)));if(r){l||(l=[[],t]),c||(c=[[],t]);const e=[];Array.isArray(l[0])&&l[0].forEach((t=>{"string"==typeof t&&e.push(s.idToName(t))}));const r=[];Array.isArray(c[0])&&c[0].forEach((e=>{"string"==typeof e&&r.push(s.idToName(e))}));const a=e.filter((e=>r.includes(e))),i=e.filter((e=>!r.includes(e))),h=r.filter((t=>!e.includes(t)));return d.createElement(Mr,{beforeOnly:i,afterOnly:h,intersection:a,title:o,showSeparator:n<p-1,key:n})}return l||(l=[e.buildEmptyItemTreeForShape(e.shapes.content),t]),c||(c=[e.buildEmptyItemTreeForShape(e.shapes.content),t]),d.createElement(kr,{before:l[0],after:c[0],title:o,showAlignmentOptions:!1,showSeparator:n<p-1,key:n})}));return d.createElement("div",{className:"framework-perseus"},h)}}const{InfoTip:Ir,InlineIcon:Rr}=e.components,{iconCircleArrowDown:zr,iconCircleArrowUp:Lr,iconPlus:Fr,iconTrash:Ur}=e.icons;class qr extends d.Component{constructor(){super(...arguments),C(this,"handleChange",(e=>{this.props.onChange({replace:e.target.checked})})),C(this,"focus",(()=>{this.refs.editor.focus()})),C(this,"getSaveWarnings",(()=>this.refs.editor.getSaveWarnings())),C(this,"serialize",(e=>this.refs.editor.serialize(e)))}render(){return d.createElement("div",{className:"perseus-hint-editor "+this.props.className},this.props.showTitle&&d.createElement("div",{className:"pod-title"},"Hint"),d.createElement(Un,{ref:"editor",key:this.props.itemId,apiOptions:this.props.apiOptions,widgets:this.props.widgets||void 0,content:this.props.content||void 0,images:this.props.images,replace:this.props.replace,placeholder:"Type your hint here...",imageUploader:this.props.imageUploader,onChange:this.props.onChange}),d.createElement("div",{className:"hint-controls-container clearfix"},this.props.showMoveButtons&&d.createElement("span",{className:"reorder-hints"},d.createElement("button",{type:"button",className:this.props.isLast?"hidden":"",onClick:f.default.partial(this.props.onMove,1)},d.createElement(Rr,zr))," ",d.createElement("button",{type:"button",className:this.props.isFirst?"hidden":"",onClick:f.default.partial(this.props.onMove,-1)},d.createElement(Rr,Lr))," ",this.props.isLast&&d.createElement(Ir,null,d.createElement("p",null,"The last hint is automatically bolded."))),d.createElement("input",{type:"checkbox",checked:this.props.replace,onChange:this.handleChange}),"Replace previous hint",this.props.showRemoveButton&&d.createElement("button",{type:"button",className:"remove-hint simple-button orange",onClick:this.props.onRemove},d.createElement(Rr,Ur),"Remove this hint"," ")))}}C(qr,"defaultProps",{className:"",content:"",replace:!1,showMoveButtons:!0,showTitle:!0,showRemoveButton:!0});class Wr extends d.Component{constructor(){super(...arguments),C(this,"updatePreview",(()=>{const e=this.props.isLast&&!/\*\*/.test(this.props.hint.content);this.refs.frame.sendNewData({type:"hint",data:{hint:this.props.hint,bold:e,pos:this.props.pos,apiOptions:this.props.apiOptions,linterContext:{contentType:"hint",highlightLint:this.props.highlightLint,paths:this.props.contentPaths}}})})),C(this,"getSaveWarnings",(()=>this.refs.editor.getSaveWarnings())),C(this,"serialize",(e=>this.refs.editor.serialize(e))),C(this,"focus",(()=>{this.refs.editor.focus()}))}componentDidMount(){this.updatePreview()}componentDidUpdate(){this.updatePreview()}render(){const e="phone"===this.props.deviceType||"tablet"===this.props.deviceType;return d.createElement("div",{className:"perseus-combined-hint-editor perseus-editor-row"},d.createElement("div",{className:"perseus-editor-left-cell"},d.createElement(qr,{ref:"editor",itemId:this.props.itemId,isFirst:this.props.isFirst,isLast:this.props.isLast,widgets:this.props.hint.widgets,content:this.props.hint.content,images:this.props.hint.images,replace:this.props.hint.replace,imageUploader:this.props.imageUploader,onChange:this.props.onChange,onRemove:this.props.onRemove,onMove:this.props.onMove,apiOptions:this.props.apiOptions})),d.createElement("div",{className:"perseus-editor-right-cell"},d.createElement(N,{deviceType:this.props.deviceType,nochrome:!0},d.createElement(jn,{ref:"frame",content:this.props.frameSource,datasetKey:"mobile",datasetValue:e,seamless:!0}))))}}C(Wr,"defaultProps",{highlightLint:!1});class Vr extends d.Component{constructor(){super(...arguments),C(this,"handleHintChange",((e,t,n,r)=>{const s=f.default(this.props.hints).clone();s[e]=f.default.extend({},this.serializeHint(e,{keepDeletedWidgets:!0}),t),this.props.onChange({hints:s},n,r)})),C(this,"handleHintRemove",(e=>{const t=f.default(this.props.hints).clone();t.splice(e,1),this.props.onChange({hints:t})})),C(this,"handleHintMove",((e,t)=>{const n=f.default(this.props.hints).clone(),r=n.splice(e,1)[0];n.splice(e+t,0,r),this.props.onChange({hints:n},(()=>{this.refs["hintEditor"+(e+t)].focus()}))})),C(this,"addHint",(()=>{const e=f.default(this.props.hints).clone().concat([{content:""}]);this.props.onChange({hints:e},(()=>{const t=e.length-1;this.refs["hintEditor"+t].focus()}))})),C(this,"getSaveWarnings",(()=>f.default.chain(this.props.hints).map(((e,t)=>f.default.map(this.refs["hintEditor"+t].getSaveWarnings(),(e=>"Hint "+(t+1)+": "+e)))).flatten(!0).value())),C(this,"serialize",(e=>this.props.hints.map(((t,n)=>this.serializeHint(n,e))))),C(this,"serializeHint",((e,t)=>this.refs["hintEditor"+e].serialize(t)))}render(){const{itemId:e,hints:t}=this.props,n=f.default.map(t,(function(n,r){return d.createElement(Wr,{ref:"hintEditor"+r,key:"hintEditor"+r,isFirst:0===r,isLast:r+1===t.length,itemId:e,hint:n,pos:r,imageUploader:this.props.imageUploader,onChange:this.handleHintChange.bind(this,r),onRemove:this.handleHintRemove.bind(this,r),onMove:this.handleHintMove.bind(this,r),deviceType:this.props.deviceType,apiOptions:this.props.apiOptions,frameSource:this.props.frameSource,highlightLint:this.props.highlightLint,contentPaths:[]})}),this);return d.createElement("div",{className:"perseus-hints-editor perseus-editor-table"},n,d.createElement("div",{className:"perseus-editor-row"},d.createElement("div",{className:"add-hint-container perseus-editor-left-cell"},d.createElement("button",{type:"button",className:"add-hint simple-button orange",onClick:this.addHint},d.createElement(Rr,Fr)," Add a hint"))))}}C(Vr,"HintEditor",qr),C(Vr,"defaultProps",{onChange:()=>{},hints:[],highlightLint:!1});const{InfoTip:jr}=e.components;class Br extends d.Component{constructor(){super(...arguments),C(this,"serialize",(()=>({calculator:this.props.calculator,chi2Table:this.props.chi2Table,periodicTable:this.props.periodicTable,tTable:this.props.tTable,zTable:this.props.zTable})))}render(){return d.createElement("div",{className:"perseus-answer-editor"},d.createElement("div",{className:"perseus-answer-options"},d.createElement("div",null,d.createElement("label",null,"Show calculator:"," ",d.createElement("input",{type:"checkbox",checked:this.props.calculator,onChange:e=>{this.props.onChange({calculator:e.target.checked})}})),d.createElement(jr,null,"Use the calculator when completing difficult calculations is NOT the intent of the question. DON’T use the calculator when testing the student’s ability to complete different types of computations.")),d.createElement("div",null,d.createElement("label",null,"Show periodic table:"," ",d.createElement("input",{type:"checkbox",checked:this.props.periodicTable,onChange:e=>{this.props.onChange({periodicTable:e.target.checked})}})),d.createElement(jr,null,"This provides the student with the ability to view a periodic table of the elements, e.g., for answering chemistry questions.")),d.createElement("div",null,d.createElement("label",null,"Show z table (statistics):"," ",d.createElement("input",{type:"checkbox",checked:this.props.zTable,onChange:e=>{this.props.onChange({zTable:e.target.checked})}})),d.createElement(jr,null,"This provides the student with the ability to view a table of critical values for the z distribution, e.g. for answering statistics questions.")),d.createElement("div",null,d.createElement("label",null,"Show t table (statistics):"," ",d.createElement("input",{type:"checkbox",checked:this.props.tTable,onChange:e=>{this.props.onChange({tTable:e.target.checked})}})),d.createElement(jr,null,"This provides the student with the ability to view a table of critical values for the Student's t distribution, e.g. for answering statistics questions.")),d.createElement("div",null,d.createElement("label",null,"Show chi-squared table (statistics):"," ",d.createElement("input",{type:"checkbox",checked:this.props.chi2Table,onChange:e=>{this.props.onChange({chi2Table:e.target.checked})}})),d.createElement(jr,null,"This provides the student with the ability to view a table of critical values for the chi-squared distribution, e.g. for answering statistics questions."))))}}C(Br,"propTypes",{calculator:g.default.bool,chi2Table:g.default.bool,onChange:g.default.func.isRequired,periodicTable:g.default.bool,tTable:g.default.bool,zTable:g.default.bool}),C(Br,"defaultProps",{calculator:!1,chi2Table:!1,periodicTable:!1,tTable:!1,zTable:!1});const $r=e.itemDataVersion;class Hr extends d.Component{constructor(){super(...arguments),C(this,"updateProps",((e,t,n)=>{const r=f.default(this.props).pick("question","answerArea");this.props.onChange(f.default(r).extend(e),t,n)})),C(this,"triggerPreviewUpdate",(e=>{this.refs.frame.sendNewData(e)})),C(this,"handleEditorChange",((e,t,n)=>{const r=f.default.extend({},this.props.question,e);this.updateProps({question:r},t,n)})),C(this,"handleItemExtrasChange",((e,t,n)=>{const r=f.default.extend({},this.props.answerArea,e);this.updateProps({answerArea:r},t,n)})),C(this,"getSaveWarnings",(()=>this.refs.questionEditor.getSaveWarnings())),C(this,"serialize",(e=>({question:this.refs.questionEditor.serialize(e),answerArea:this.refs.itemExtrasEditor.serialize(e),itemDataVersion:$r})))}render(){const e="phone"===this.props.deviceType||"tablet"===this.props.deviceType;return d.createElement("div",{className:"perseus-editor-table"},d.createElement("div",{className:"perseus-editor-row perseus-question-container"},d.createElement("div",{className:"perseus-editor-left-cell"},d.createElement("div",{className:"pod-title"},"Question"),d.createElement(Un,S({ref:"questionEditor",key:this.props.itemId,placeholder:"Type your question here...",className:"perseus-question-editor",imageUploader:this.props.imageUploader,onChange:this.handleEditorChange,apiOptions:this.props.apiOptions,showWordCount:!0},this.props.question))),d.createElement("div",{className:"perseus-editor-right-cell"},d.createElement("div",{id:"problemarea"},d.createElement(N,{deviceType:this.props.deviceType,nochrome:!0},d.createElement(jn,{ref:"frame",key:this.props.deviceType,content:this.props.frameSource,datasetKey:"mobile",datasetValue:e,seamless:!0})),d.createElement("div",{id:"hintsarea",className:"hintsarea",style:{display:"none"}})))),d.createElement("div",{className:"perseus-editor-row perseus-answer-container"},d.createElement("div",{className:"perseus-editor-left-cell"},d.createElement("div",{className:"pod-title"},"Question extras"),d.createElement(Br,S({ref:"itemExtrasEditor",onChange:this.handleItemExtrasChange},this.props.answerArea))),d.createElement("div",{className:"perseus-editor-right-cell"},d.createElement("div",{id:"answer_area"}))))}}C(Hr,"defaultProps",{onChange:()=>{},question:{},answerArea:{}});const{HUD:Gr}=e.components;class Yr extends d.Component{constructor(e){super(e),C(this,"_isMounted",void 0),C(this,"rendererMountNode",void 0),C(this,"renderer",void 0),C(this,"toggleJsonMode",(()=>{this.setState({json:this.serialize({keepDeletedWidgets:!0})},(()=>{this.props.onChange({jsonMode:!this.props.jsonMode})}))})),C(this,"handleChange",((e,t,n)=>{const r=f.default(this.props).pick("question","hints","answerArea");f.default(r).extend(e),this.props.onChange(r,t,n)})),C(this,"changeJSON",(e=>{this.setState({json:e}),this.props.onChange(e)})),this.state={json:f.default.pick(this.props,"question","answerArea","hints","itemDataVersion"),gradeMessage:"",wasAnswered:!1,highlightLint:!0},this._isMounted=!1}componentDidMount(){this._isMounted=!0,this.rendererMountNode=document.createElement("div"),this.updateRenderer()}componentDidUpdate(){setTimeout((()=>{this.updateRenderer()}))}componentWillUnmount(){this._isMounted=!1}updateRenderer(){const e=!this.props.developerMode||!this.props.jsonMode;if(!this._isMounted||!e)return;const t="phone"===this.props.previewDevice||"tablet"===this.props.previewDevice,n={...this.getApiOptions(),customKeypad:t,isMobile:t};this.refs.itemEditor.triggerPreviewUpdate({type:"question",data:f.default({item:this.serialize(),apiOptions:n,initialHintsVisible:0,device:this.props.previewDevice,linterContext:{contentType:"exercise",highlightLint:this.state.highlightLint,paths:this.props.contentPaths||[]},reviewMode:!0,legacyPerseusLint:this.refs.itemEditor.getSaveWarnings()}).extend(f.default(this.props).pick("workAreaSelector","solutionAreaSelector","hintsAreaSelector","problemNum"))})}getApiOptions(){return{...e.ApiOptions.defaults,...this.props.apiOptions}}getSaveWarnings(){const e=this.refs.itemEditor.getSaveWarnings(),t=this.refs.hintsEditor.getSaveWarnings();return e.concat(t)}serialize(e){return this.props.jsonMode?this.state.json:f.default.extend(this.refs.itemEditor.serialize(e),{hints:this.refs.hintsEditor.serialize(e)})}scorePreview(){return this.renderer?this.renderer.scoreInput():null}render(){let t="framework-perseus";const n="phone"===this.props.previewDevice||"tablet"===this.props.previewDevice,r={...this.getApiOptions(),customKeypad:n,isMobile:n};return r.isMobile&&(t+=" "+e.ClassNames.MOBILE),d.createElement("div",{id:"perseus",className:t},d.createElement("div",{style:{marginBottom:10}},this.props.developerMode&&d.createElement("span",null,d.createElement("label",null," ","Developer JSON Mode:"," ",d.createElement("input",{type:"checkbox",checked:this.props.jsonMode,onChange:this.toggleJsonMode}))," "),!this.props.jsonMode&&d.createElement(rr,{deviceType:this.props.previewDevice,onViewportSizeChanged:this.props.onPreviewDeviceChange}),!this.props.jsonMode&&d.createElement(Gr,{message:"Style warnings",enabled:this.state.highlightLint,onClick:()=>{this.setState({highlightLint:!this.state.highlightLint})}})),this.props.developerMode&&this.props.jsonMode&&d.createElement("div",null,d.createElement(T,{multiLine:!0,value:this.state.json,onChange:this.changeJSON})),(!this.props.developerMode||!this.props.jsonMode)&&d.createElement(Hr,{ref:"itemEditor",itemId:this.props.itemId,question:this.props.question,answerArea:this.props.answerArea,imageUploader:this.props.imageUploader,onChange:this.handleChange,wasAnswered:this.state.wasAnswered,gradeMessage:this.state.gradeMessage,deviceType:this.props.previewDevice,apiOptions:r,frameSource:this.props.frameSource}),(!this.props.developerMode||!this.props.jsonMode)&&d.createElement(Vr,{ref:"hintsEditor",itemId:this.props.itemId,hints:this.props.hints,imageUploader:this.props.imageUploader,onChange:this.handleChange,deviceType:this.props.previewDevice,apiOptions:r,frameSource:this.props.frameSource,highlightLint:this.state.highlightLint}))}}C(Yr,"defaultProps",{developerMode:!1,jsonMode:!1,onChange:()=>{}});const{findContentNodesInItem:Kr,findHintNodesInItem:Jr,inferItemShape:Xr}=e.MultiItems;function Zr(t,n){const r=e.PerseusMarkdown.parse(t);e.PerseusMarkdown.traverseContent(r,(function(e){"image"===e.type&&n.push(e.target)}))}function Qr(e,t){e&&e.backgroundImage&&e.backgroundImage.url&&t.push(e.backgroundImage.url)}function es(t){const n=[];return f.default.each(t,(t=>{e.traverse(t,(e=>{Zr(e,n)}),(e=>function(e,t){e.options&&("categorizer"===e.type?(f.default.each(e.options.items,(function(e){Zr(e,t)})),f.default.each(e.options.categories,(function(e){Zr(e,t)}))):"image"===e.type?(Zr(e.options.title,t),Zr(e.options.caption,t)):"matcher"===e.type?(f.default.each(e.options.left,(function(e){Zr(e,t)})),f.default.each(e.options.right,(function(e){Zr(e,t)})),f.default.each(e.options.labels,(function(e){Zr(e,t)}))):"matrix"===e.type?(Zr(e.options.prefix,t),Zr(e.options.suffix,t)):"orderer"===e.type?f.default.each(e.options.options,(function(e){Zr(e.content,t)})):"passage"===e.type?Zr(e.options.passageTitle,t):"radio"===e.type?f.default.each(e.options.choices,(function(e){Zr(e.content,t)})):"sorter"===e.type?f.default.each(e.options.correct,(function(e){Zr(e,t)})):"table"===e.type&&f.default.each(e.options.headers,(function(e){Zr(e,t)})),"grapher"===e.type?Qr(e.options.graph,t):"image"===e.type||"interactive-graph"===e.type?Qr(e.options,t):"measurer"===e.type&&e.options.image?t.push(e.options.image.url):"plotter"===e.type?t.push(e.options.picUrl):"transformer"===e.type&&Qr(e.options.graph,t))}(e,n)))})),n}var ts,ns={findImagesInArticles:function(e){return es(e)},findImagesInItemData:function(e){let t=[];if(e._multi){const n=Xr(e);Kr(e,n,(e=>t.push(e))),Jr(e,n,(e=>t.push(e)))}else t=[e.question,...e.hints];return es(t)}},rs={exports:{}};ts=function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var s=t[r]={i:r,l:!1,exports:{}};return e[r].call(s.exports,s,s.exports,n),s.l=!0,s.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1)}([function(e,t){var n=function(e){return e===Object(e)},r=function(){for(var e={},t=0;t<arguments.length;t++){var n=arguments[t];if(n)for(var r in n)e[r]=n[r]}return e};e.exports={isObject:n,merge:r,clone:function(e){return n(e)?Array.isArray(e)?e.slice():r(e):e}}},function(e,t,n){var r=n(0),s=r.clone,a=r.isObject,i=r.merge,o=n(2),l=n(3),c=n(4),p=function(e){return Array.isArray(e)?o:a(e)?l:"string"==typeof e?c:void 0},h=function(e){if(e instanceof h)return e;if(!(this instanceof h))return new h(e);var t=p(e);this._wrapped=t.thaw?t.thaw(e):e};h.prototype.freeze=function(){var e=this._wrapped,t=p(e);return t.freeze?t.freeze(e):e},h.prototype.zoom=function(e){return void 0===this._zoomStack&&(this._zoomStack=[]),this._zoomStack.push({zoom:e,wrapped:this._wrapped}),this._wrapped=h(this._wrapped).get(e),this},h.prototype.deZoom=function(){var e=this._zoomStack.pop();return this._wrapped=h(e.wrapped).set(e.zoom,this._wrapped).freeze(),this},h.prototype.get=function(e){for(var t=this._wrapped,n=0;n<e.length;n++)t=p(t).get(t,e[n]);return t},h.prototype.mod=function(e,t){var n=this._wrapped,r=s(n),a=p(n);if(0===e.length)this._wrapped=t(this._wrapped);else if(1===e.length)this._wrapped=a.mod(r,e[0],t);else{var i=e[0],o=e.slice(1);r[i]=h(n[i]).mod(o,t).freeze(),this._wrapped=r}return this},h.prototype.merge=function(e,t){return this._wrapped=h(this._wrapped).mod(e,(function(e){return i(e,t)})).freeze(),this},h.prototype.del=function(e){var t=this._wrapped,n=p(t);if(1===e.length)this._wrapped=n.del(t,e[0]);else{var r=e[0],a=e.slice(1),i=s(t);i[r]=h(t[r]).del(a).freeze(),this._wrapped=i}return this},h.prototype.set=function(e,t){return this.mod(e,(function(){return t}))},e.exports=h},function(e,t){e.exports={get:function(e,t){return e[t]},set:function(e,t,n){var r=e.splice();return r[t]=n,r},mod:function(e,t,n){var r=e.slice();return r[t]=n(e[t]),r},del:function(e,t){var n=e.slice();return n.splice(t,1),n}}},function(e,t,n){var r=n(0).clone;e.exports={get:function(e,t){return e[t]},set:function(e,t,n){var s=r(e);return s[t]=n,s},mod:function(e,t,n){var s=r(e);return s[t]=n(e[t]),s},del:function(e,t){var n=r(e);return delete n[t],n}}},function(e,t){e.exports={get:function(e,t){return e[t]},set:function(e,t,n){var r=e.splice();return r[t]=n,r},mod:function(e,t,n){var r=e.splice();return r[t]=n(e[t]),r},del:function(e,t){var n=e.slice();return n.splice(t),n}}}])};var ss=pe(rs.exports=ts());class as extends d.Component{render(){const{children:e,color:t,onClick:n,...r}=this.props;return d.createElement("div",S({className:o.css(is.baseButton,"green"===t&&is.green,"orange"===t&&is.orange),onClick:n},r),e)}}C(as,"propTypes",{children:g.default.node,color:g.default.oneOf(["orange","green"]),onClick:g.default.func}),C(as,"defaultProps",{children:null,color:"green",onClick:()=>{}});const is=o.StyleSheet.create({baseButton:{top:"0",fontSize:"11px",padding:"3px 10px",backgroundRepeat:"repeat-x",borderColor:"\n rgba(0, 0, 0, 0.1)\n rgba(0, 0, 0, 0.1)\n rgba(0, 0, 0, 0.25)\n ",color:"#ffffff",borderRadius:"3px",lineHeight:"15px",cursor:"pointer",transition:"box-shadow ease-in-out 0.15s",appearance:"none",textDecoration:"none",textAlign:"center",":hover":{boxShadow:"0 1px 1px rgba(0, 0, 0, 0.35),\n inset 0 0 50px 5px rgba(255, 255, 255, 0.2)"}},green:{border:"1px solid #7fab07",backgroundColor:"#80ac07",backgroundImage:"linear-gradient(to bottom, #8aba08, #719807)",":hover":{borderBottomColor:"#547105",backgroundColor:"#719807"}},orange:{border:"1px solid #d45704",backgroundColor:"#d55704",backgroundImage:"linear-gradient(to bottom, #e35d04, #c04f03)",":hover":{borderBottomColor:"#983e03",backgroundColor:"#c04f03"}}}),{InlineIcon:os}=e.components,{iconChevronDown:ls,iconTrash:cs}=e.icons,{MultiRenderer:ps}=e.MultiItems;class hs extends d.Component{constructor(){super(...arguments),C(this,"_handleSelectMode",(e=>{if(this.props.onChange){const t=e.target.value;this.props.onChange(t)}}))}render(){return d.createElement("label",null,"Mode:"," ",d.createElement("select",{value:this.props.currentMode,onChange:this._handleSelectMode},d.createElement("option",{value:"edit"},"Edit"),d.createElement("option",{value:"preview"},"Preview"),d.createElement("option",{value:"json"},"Dev-only JSON")))}}function us(e){return e.replace(/[A-Z]/g,(e=>" "+e.toLowerCase()))}function ds(e){return e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()}function ms(e){return"s"===e.charAt(e.length-1)?e.slice(0,-1):e}function fs(e){return["_multi",...e]}const gs=e=>{let{depth:t,...n}=e;const r=Math.min(t,5)+1,s="h".concat(r);return d.createElement(s,n)},vs=e=>{const{shape:t,data:n,path:r,actions:s,name:a,controls:i,...o}=e,l=a||us(r[r.length-1]||""),c=d.createElement(ws,S({},o,{shape:t,data:n,path:r,actions:s})),p=r.join(".");return"array"===t.type?d.createElement(bs,{key:p,name:l,controls:i,path:r,shape:t,actions:s},c):"object"===t.type?d.createElement(Es,{key:p,name:l,controls:i,path:r},c):d.createElement(ys,{key:p,name:l,controls:i,path:r,shape:t},c)},ys=e=>{let{name:t,controls:n,children:r,path:s,shape:a}=e;const i=("content"===a.type||"hint"===a.type)&&d.createElement("div",{className:o.css(Os.containerHeader)},d.createElement(gs,{depth:s.length,className:o.css(Os.containerTitle)},ds(t)));return d.createElement("div",{className:o.css(Os.container)},d.createElement("span",{className:o.css(Os.row,Os.rowHeading)},d.createElement("div",{className:o.css(Os.columnLeft)},d.createElement("div",{className:"pod-title "+o.css(Os.containerHeader)},d.createElement("div",{className:o.css(Os.containerTitle)},ds(t)),n)),d.createElement("div",{className:o.css(Os.columnRight)},i)),r)},bs=e=>{const{name:t,controls:n,children:r,path:s,shape:a,actions:i}=e;return d.createElement("div",{className:o.css(Os.container)},n&&d.createElement("div",{className:o.css(Os.columnLeft,Os.containerHeader)},n),d.createElement("div",null,r),d.createElement("div",{className:o.css(Os.columnLeft)},d.createElement("a",{href:"javascript:void 0",onClick:()=>i.addArrayElement(s,a.elementShape)},"Add a ",ms(t))))},Es=e=>{let{name:t,controls:n,children:r,path:s}=e;const a=d.createElement("div",{className:o.css(Os.containerHeader)},d.createElement(gs,{depth:s.length,className:o.css(Os.containerTitle)},ds(t)),n),i=(t||n)&&d.createElement("div",{className:o.css(Os.containerHeader,Os.previewCollectionHeader)},d.createElement(gs,{depth:s.length,className:o.css(Os.containerTitle)},ds(t))),l=a&&i;return d.createElement("div",{className:o.css(Os.container)},l&&d.createElement("span",{className:o.css(Os.row)},d.createElement("div",{className:o.css(Os.columnLeft)},a),d.createElement("div",{className:o.css(Os.columnRight)},i)),d.createElement("div",{className:o.css(s.length>0&&Os.contentIndent)},r))},ws=e=>{const{shape:t,data:n,...r}=e;return"content"===t.type?d.createElement(Cs,S({shape:t,data:n},r)):"hint"===t.type?d.createElement(Ss,S({shape:t,data:n},r)):"tags"===t.type?d.createElement(ks,S({shape:t,data:n},r)):"array"===t.type?d.createElement(Ns,S({shape:t,data:n},r)):"object"===t.type?d.createElement(Ts,S({shape:t,data:n},r)):null},xs=e=>class extends d.Component{constructor(){super(...arguments),C(this,"stickynessTimer",void 0),C(this,"state",{sticky:!1}),C(this,"updateStickiness",(()=>{const e=E.default.findDOMNode(this).offsetHeight>window.innerHeight;e!==this.state.sticky&&this.setState({sticky:e})}))}componentDidMount(){this.stickynessTimer=setInterval(this.updateStickiness,1e3),this.updateStickiness()}componentWillUnmount(){clearInterval(this.stickynessTimer)}render(){return d.createElement(e,S({},this.props,{sticky:this.state.sticky}))}},Cs=xs((e=>{const{data:t,path:n,actions:r,apiOptions:s,renderers:a,sticky:i}=e,l=d.createElement("div",{className:"framework-perseus"},ss(a).get(n));return d.createElement("span",null,d.createElement("div",{className:o.css(Os.row)},d.createElement("div",{className:o.css(Os.columnLeft)},d.createElement("div",{className:o.css(i&&Os.sticky)},d.createElement(Un,S({},t,{onChange:e=>r.mergeValueAtPath(n,e),apiOptions:s})))),d.createElement("div",{className:o.css(Os.columnRight)},d.createElement("div",{className:o.css(i&&Os.sticky)},l))))})),Ss=xs((e=>{const{data:t,path:n,actions:r,apiOptions:s,renderers:a,sticky:i}=e,l=d.createElement("div",{className:"framework-perseus"},ss(a).get(n));return d.createElement("div",{className:o.css(Os.row)},d.createElement("div",{className:o.css(Os.columnLeft)},d.createElement("div",{className:o.css(i&&Os.sticky)},d.createElement(qr,S({},t,{className:o.css(Os.hintEditor),onChange:e=>r.mergeValueAtPath(n,e),apiOptions:s,showTitle:!1,showRemoveButton:!1,showMoveButtons:!1,onRemove:()=>{},onMove:e=>{},isFirst:!0,isLast:!0})))),d.createElement("div",{className:o.css(Os.columnRight)},d.createElement("div",{className:o.css(i&&Os.sticky)},l)))})),ks=e=>{const{data:t,path:n,actions:r,apiOptions:s}=e,{GroupMetadataEditor:a}=s;return null==a?null:d.createElement("div",{className:o.css(Os.columnLeft)},d.createElement("div",{className:o.css(Os.tagsEditor)},d.createElement(a,{value:t,onChange:e=>r.setValueAtPath(n,e),showTitle:!1})))},Ns=e=>{const{shape:t,data:n,path:r,actions:s,...a}=e,i=ms(us(r[r.length-1])),l=t.elementShape.type,c="content"===l||"hint"===l,p=n.map(((e,l)=>{const p=r.concat(l),h=[l>0&&d.createElement("div",{key:"moveArrayElementUp",className:o.css(Os.control)},d.createElement(as,{color:"orange",title:"Move up",onClick:()=>s.moveArrayElementUp(p)},d.createElement("div",{className:o.css(Os.verticalFlip)},d.createElement(os,ls)))),l<n.length-1&&d.createElement("div",{key:"moveArrayElementDown",className:o.css(Os.control)},d.createElement(as,{color:"orange",title:"Move down",onClick:()=>s.moveArrayElementDown(p)},d.createElement(os,ls))),d.createElement("div",{key:"removeArrayElement",className:o.css(Os.control)},d.createElement(as,{color:"orange",title:"Delete",onClick:()=>s.removeArrayElement(p)},d.createElement(os,cs)))];return d.createElement("div",{key:l,className:o.css(Os.arrayElement,!c&&Os.arrayElementAndNotLeaf)},d.createElement(vs,S({},a,{key:l,shape:t.elementShape,data:e,path:p,actions:s,name:"".concat(i," ").concat(l+1),controls:h})))}));return d.createElement("div",null,p)},Ts=e=>{const{shape:t,data:n,path:r,...s}=e,a=Object.keys(t.shape).map((e=>d.createElement("div",{key:e,className:o.css(Os.objectElement)},d.createElement(vs,S({},s,{shape:t.shape[e],data:n[e],path:r.concat(e)})))));return d.createElement("div",null,a)};class _s extends d.Component{constructor(){super(...arguments),C(this,"layout",void 0),C(this,"_renderLayout",(()=>{const{Layout:e,apiOptions:t,item:n}=this.props;return d.createElement(e,{ref:e=>this.layout=e,item:n,apiOptions:t})})),C(this,"_renderJson",(()=>d.createElement("div",null,d.createElement(hs,{currentMode:this.props.editorMode,onChange:e=>this.props.onChange({editorMode:e})}),d.createElement(T,{multiLine:!0,value:this.props.item,onChange:e=>this.props.onChange({item:e})})))),C(this,"_renderPreview",(()=>d.createElement("div",null,d.createElement(hs,{currentMode:this.props.editorMode,onChange:e=>this.props.onChange({editorMode:e})}),this._renderLayout()))),C(this,"mergeValueAtPath",((e,t)=>{this.props.onChange({item:ss(this.props.item).merge(fs(e),t).freeze()})})),C(this,"setValueAtPath",((e,t)=>{this.props.onChange({item:ss(this.props.item).set(fs(e),t).freeze()})})),C(this,"addArrayElement",((t,n)=>{const r=ss(this.props.item).get(fs(t)).length,s=t.concat(r),a=e.buildEmptyItemTreeForShape(n);this.props.onChange({item:ss(this.props.item).set(fs(s),a).freeze()})})),C(this,"removeArrayElement",(e=>{this.props.onChange({item:ss(this.props.item).del(fs(e)).freeze()})})),C(this,"moveArrayElementDown",(e=>{const t=e[e.length-1]+1,n=e.slice(0,-1).concat(t),r=ss(this.props.item).get(fs(e)),s=ss(this.props.item).get(fs(n));this.props.onChange({item:ss(this.props.item).set(fs(e),s).set(fs(n),r).freeze()})})),C(this,"moveArrayElementUp",(e=>{const t=e[e.length-1],n=e.slice(0,-1).concat(t-1);this.moveArrayElementDown(n)})),C(this,"_renderEdit",(()=>{const t={...e.ApiOptions.defaults,...this.props.apiOptions},{item:n}=this.props,r=this.props.Layout.shape;return d.createElement("div",{className:"perseus-multirenderer-editor"},d.createElement(hs,{currentMode:this.props.editorMode,onChange:e=>this.props.onChange({editorMode:e})}),d.createElement(ps,{item:n,shape:r,apiOptions:t},(s=>{let{renderers:a}=s;return d.createElement(vs,{shape:r,data:e.itemToTree(n),path:[],actions:this,apiOptions:t,renderers:a})})))})),C(this,"score",(()=>{if(this.layout)return this.layout.score()})),C(this,"getSerializedState",(()=>{if(this.layout)return this.layout.getSerializedState()})),C(this,"restoreSerializedState",(e=>{this.layout&&this.layout.restoreSerializedState(e)})),C(this,"_renderContent",(()=>{switch(this.props.editorMode){case"json":return this._renderJson();case"preview":return this._renderPreview();case"edit":return this._renderEdit();default:return d.createElement(hs,{currentMode:this.props.editorMode,onChange:e=>this.props.onChange({editorMode:e})})}}))}render(){return d.createElement("div",{id:"perseus"},this._renderContent())}}const Os=o.StyleSheet.create({container:{},editor:{width:"100%"},treePreview:{position:"relative"},verticalFlip:{transform:"scaleY(-1)"},control:{marginLeft:12},containerHeader:{alignItems:"flex-end",display:"flex",flexDirection:"row"},previewCollectionHeader:{marginBottom:16},containerTitle:{flexGrow:1,margin:0},contentIndent:{marginLeft:8},hintEditor:{paddingBottom:0},arrayElement:{marginBottom:16},arrayElementAndNotLeaf:{borderBottom:"1px solid #ccc",":first-child":{borderTop:"1px solid #ccc",paddingTop:16}},objectElement:{marginBottom:16},tagsEditor:{border:"1px solid #ddd",padding:"5px 10px"},row:{display:"flex",position:"relative"},columnLeft:{width:360,marginRight:30,position:"relative"},columnRight:{flex:1,marginLeft:30,position:"relative"},sticky:{position:"sticky",top:33},rowHeading:{position:"sticky",backgroundColor:"white",width:"100%",zIndex:101,top:-1}}),Ms=v.default({displayName:"StatefulArticleEditor",getInitialState:function(){return f.default({}).extend(this.props,{mode:"edit",onChange:this.handleChange,ref:"editor",screen:"phone"})},componentDidMount:function(){this._isMounted=!0},UNSAFE_componentWillReceiveProps:function(e){this.setState(f.default(e).omit("onChange","ref"))},componentWillUnmount:function(){this._isMounted=!1},getSaveWarnings:function(){return this.refs.editor.getSaveWarnings()},serialize:function(){return this.refs.editor.serialize()},handleChange:function(e,t){this._isMounted&&this.setState(e,t)},scorePreview:function(){return this.refs.editor.scorePreview()},render:function(){const{mode:e,screen:t}=this.state;return d.createElement("div",null,d.createElement("div",{style:As.controlBar},d.createElement("span",{style:As.controls},"Mode:"," ",d.createElement("span",{onClick:()=>this.setState({mode:"edit"}),style:"edit"===e?As.controlSelected:As.control},"EDIT")," | ",d.createElement("span",{onClick:()=>this.setState({mode:"preview"}),style:"preview"===e?As.controlSelected:As.control},"PREVIEW")," | ",d.createElement("span",{onClick:()=>this.setState({mode:"json"}),style:"json"===e?As.controlSelected:As.control},"JSON")),d.createElement("span",{style:As.controls},"Screen:"," ",d.createElement("span",{onClick:()=>this.setState({screen:"phone"}),style:"phone"===t?As.controlSelected:As.control},"PHONE")," | ",d.createElement("span",{onClick:()=>this.setState({screen:"tablet"}),style:"tablet"===t?As.controlSelected:As.control},"TABLET")," | ",d.createElement("span",{onClick:()=>this.setState({screen:"desktop"}),style:"desktop"===t?As.controlSelected:As.control},"DESKTOP"))),d.createElement("div",{style:As.editor},d.createElement(Jn,this.state)))}}),As={controlBar:{marginBottom:25,marginTop:5},controls:{marginRight:10},controlSelected:{cursor:"default",fontWeight:700},control:{cursor:"pointer"},editor:{marginTop:-20}},Ps=v.default({displayName:"StatefulEditorPage",propTypes:{componentClass:g.default.func},getDefaultProps:function(){return{componentClass:Yr}},render:function(){const e=this.props.componentClass;return d.createElement(e,this.state)},getInitialState:function(){return f.default({}).extend(f.default.omit(this.props,"componentClass"),{onChange:this.handleChange,ref:"editor"})},componentDidMount:function(){this._isMounted=!0},componentWillUnmount:function(){this._isMounted=!1},UNSAFE_componentWillReceiveProps:function(e){this.setState(f.default(e).pick("apiOptions","imageUploader","developerMode","problemNum","previewDevice","frameSource"))},getSaveWarnings:function(){return this.refs.editor.getSaveWarnings()},serialize:function(){return this.refs.editor.serialize()},handleChange:function(e,t){this._isMounted&&this.setState(e,t)},scorePreview:function(){return this.refs.editor.scorePreview()}}),{PropCheckBox:Ds,TextListEditor:Is}=e.components,Rs=e.Categorizer.widget;class zs extends d.Component{constructor(){var t;super(...arguments),t=this,C(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),C(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){return d.createElement("div",null,d.createElement("div",{className:"perseus-widget-row"},d.createElement(Ds,{label:"Randomize item order",labelAlignment:"right",randomizeItems:this.props.randomizeItems,onChange:this.props.onChange})),"Categories:",d.createElement(Is,{options:this.props.categories,onChange:e=>{this.change("categories",e)},layout:"horizontal"}),"Items:",d.createElement(Is,{options:this.props.items,onChange:e=>{this.change({items:e,values:f.default.first(this.props.values,e.length)})},layout:"vertical"}),d.createElement(Rs,{apiOptions:this.props.apiOptions,items:this.props.items,categories:this.props.categories,values:this.props.values,onChange:e=>{this.props.onChange(e)},trackInteraction:function(){}}))}}C(zs,"propTypes",{...e.Changeable.propTypes,apiOptions:e.ApiOptions.propTypes,items:g.default.arrayOf(g.default.string),categories:g.default.arrayOf(g.default.string),values:g.default.arrayOf(g.default.number),randomizeItems:g.default.bool}),C(zs,"widgetName","categorizer"),C(zs,"defaultProps",{items:[],categories:[],values:[],randomizeItems:!1});class Ls extends d.Component{constructor(e){super(e),C(this,"handleChange",(e=>{this.setState({value:e.target.value})})),C(this,"handleBlur",(e=>{this.props.onChange(e.target.value)})),this.state={value:this.props.value}}UNSAFE_componentWillReceiveProps(e){this.setState({value:e.value})}render(){return d.createElement("input",{className:this.props.className,style:this.props.style,type:"text",value:this.state.value,onChange:this.handleChange,onBlur:this.handleBlur})}}const{InfoTip:Fs,PropCheckBox:Us}=e.components;class qs extends d.Component{constructor(){var t;super(...arguments),t=this,C(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),C(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){return d.createElement("fieldset",{className:"pair-editor"},d.createElement("label",null,"Name:"," ",d.createElement(Ls,{value:this.props.name,onChange:this.change("name")})),d.createElement("label",null," ","Value:"," ",d.createElement(Ls,{value:this.props.value,onChange:this.change("value")})))}}C(qs,"propTypes",{...e.Changeable.propTypes,name:g.default.string,value:g.default.string}),C(qs,"defaultProps",{name:"",value:""});class Ws extends d.Component{constructor(){var t;super(...arguments),t=this,C(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),C(this,"handlePairChange",((e,t)=>{const n=this.props.pairs.slice();n[e]=t;const r=n[n.length-1];r.name&&r.value&&n.push({name:"",value:""}),this.change("pairs",n)})),C(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){const e=f.default.map(this.props.pairs,((e,t)=>d.createElement(qs,{key:t,name:e.name,value:e.value,onChange:this.handlePairChange.bind(this,t)})));return d.createElement("div",null,e)}}C(Ws,"propTypes",{...e.Changeable.propTypes,pairs:g.default.arrayOf(g.default.shape({name:g.default.string,value:g.default.string})).isRequired});const Vs=/khanacademy\.org\/computer-programming\/[^\/]+\/(\d+)/;class js extends d.Component{constructor(){var t;super(...arguments),t=this,C(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),C(this,"_handleSettingsChange",(e=>{this.change({settings:e.pairs})})),C(this,"_handleProgramIDChange",(t=>{t=function(e){const t=Vs.exec(e);return t&&(e=t[1]),e}(t);const{isDevServer:n,InitialRequestUrl:r}=e.Dependencies.getDependencies(),s=n?r.origin:"https://www.khanacademy.org",a="".concat(s,"/api/internal/scratchpads/").concat(t);y.default.getJSON(a).done((e=>{const n=e.userAuthoredContentType;this.change({width:e.width,height:e.height,programID:t,programType:n})})).fail(((n,r,s)=>{e.Log.error("Error retrieving scratchpad info for program ID ",e.Errors.TransientService,{cause:s,loggedMetadata:{textStatus:r,programID:t}}),this.change({width:400,height:400,programID:t,programType:null})}))})),C(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){return d.createElement("div",null,d.createElement("label",null,"Url or Program ID:"," ",d.createElement(Ls,{value:this.props.programID,onChange:this._handleProgramIDChange})),d.createElement("br",null),d.createElement(Us,{label:"Show Editor",showEditor:this.props.showEditor,onChange:this.props.onChange}),d.createElement(Fs,null,'If you show the editor, you should use the "full-width" alignment to make room for the width of the editor.'),d.createElement("br",null),d.createElement(Us,{label:"Show Buttons",showButtons:this.props.showButtons,onChange:this.props.onChange}),d.createElement("br",null),d.createElement("label",null,"Settings:",d.createElement(Ws,{name:"settings",pairs:this.props.settings,onChange:this._handleSettingsChange}),d.createElement(Fs,null,"Settings that you add here are available to the program as an object returned by ",d.createElement("code",null,"Program.settings()"))))}}C(js,"propTypes",{...e.Changeable.propTypes}),C(js,"widgetName","cs-program"),C(js,"defaultProps",{programID:"",programType:null,settings:[{name:"",value:""}],showEditor:!1,showButtons:!1,width:400,height:400});const{TextInput:Bs}=e.components;class $s extends d.Component{constructor(){var t;super(...arguments),t=this,C(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),C(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){return d.createElement("div",{className:"perseus-widget-definition-editor"},d.createElement("a",{href:"https://docs.google.com/document/d/1udaPef4imOfTMhmLDlWq4SM0mxL0r3YHFZE-5J1uGfo",target:"_blank"},"Definition style guide"),d.createElement("div",{className:"perseus-widget-row"},d.createElement("label",null,"Word to be defined:"," ",d.createElement(Bs,{value:this.props.togglePrompt,onChange:this.change("togglePrompt"),placeholder:"define me"}))),d.createElement("div",{className:"perseus-widget-row"},d.createElement(Un,{apiOptions:this.props.apiOptions,content:this.props.definition,widgetEnabled:!1,placeholder:"definition goes here",onChange:e=>{const t={};f.default.has(e,"content")&&(t.definition=e.content),this.change(t)}})))}}C($s,"propTypes",{...e.Changeable.propTypes,togglePrompt:g.default.string,definition:g.default.string,apiOptions:g.default.any}),C($s,"widgetName","definition"),C($s,"defaultProps",{togglePrompt:"",definition:""});const{InfoTip:Hs,InlineIcon:Gs}=e.components,{iconPlus:Ys,iconTrash:Ks}=e.icons;class Js extends d.Component{constructor(){super(...arguments),C(this,"onPlaceholderChange",(e=>{const t=e.target.value;this.props.onChange({placeholder:t})})),C(this,"onCorrectChange",(e=>{const t=f.default.map(this.props.choices,(function(t,n){return f.default.extend({},t,{correct:n===e})}));this.props.onChange({choices:t})})),C(this,"onContentChange",((e,t)=>{const n=this.props.choices.slice(),r=f.default.clone(n[e]);r.content=t.target.value,n[e]=r,this.props.onChange({choices:n})})),C(this,"addChoice",(e=>{e.preventDefault();const t=this.props.choices;this.props.onChange({choices:t.concat([{content:"",correct:!1}])},this.focus.bind(this,t.length))})),C(this,"removeChoice",((e,t)=>{t.preventDefault();const n=f.default(this.props.choices).clone();n.splice(e,1),this.props.onChange({choices:n})})),C(this,"focus",(e=>(E.default.findDOMNode(this.refs["editor"+e]).focus(),!0))),C(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){const e=f.default.uniqueId("perseus_dropdown_");return d.createElement("div",{className:"perseus-widget-dropdown"},d.createElement("div",{className:"dropdown-info"},"Dropdown",d.createElement(Hs,null,d.createElement("p",null,"The drop down is useful for making inequalities in a custom format. We normally use the symbols ","<",","," ",">",', ≤, ≥ (in that order) which you can copy into the choices. When possible, use the "multiple choice" answer type instead.'))),d.createElement("div",{className:"dropdown-placeholder"},d.createElement("input",{type:"text",placeholder:"Placeholder value",value:this.props.placeholder,onChange:this.onPlaceholderChange}),d.createElement(Hs,null,d.createElement("p",null,"This value will appear as the drop down default. It should give the user some indication of the values available in the drop down itself, e.g., Yes/No/Maybe."))),d.createElement("div",{className:"clearfix"}),d.createElement("ul",{className:"dropdown-choices"},this.props.choices.map((function(t,n){const r=t.correct?"correct":"incorrect";return d.createElement("li",{key:""+n},d.createElement("div",null,d.createElement("input",{ref:"radio"+n,type:"radio",name:e,checked:t.correct?"checked":"",onChange:this.onCorrectChange.bind(this,n),value:n}),d.createElement("input",{type:"text",ref:"editor"+n,onChange:this.onContentChange.bind(this,n),className:r,value:t.content}),d.createElement("a",{href:"#",className:"simple-button orange",onClick:this.removeChoice.bind(this,n)},d.createElement("span",{className:"remove-choice"},d.createElement(Gs,Ks)))))}),this)),d.createElement("div",{className:"add-choice-container"},d.createElement("a",{href:"#",className:"simple-button orange",onClick:this.addChoice},d.createElement(Gs,Ys)," Add a choice"," ")))}}C(Js,"propTypes",{choices:g.default.arrayOf(g.default.shape({content:g.default.string,correct:g.default.bool})),placeholder:g.default.string}),C(Js,"widgetName","dropdown"),C(Js,"defaultProps",{placeholder:"",choices:[{content:"",correct:!1}]});var Xs=Math.pow(2,-42);function Zs(e){return f.default.isNumber(e)&&!f.default.isNaN(e)}function Qs(e,t,n){return null==e||null==t?e===t:e===t||(null==n&&(n=1e-9),Math.abs(e-t)<n)}function ea(e,t){var n=Math.pow(10,t);return Math.round(e*n)/n}function ta(e,t){return Math.round(e/t)*t}function na(e,t){return Math.floor(e/t)*t}function ra(e,t){return Math.ceil(e/t)*t}var sa=Object.freeze({__proto__:null,DEFAULT_TOLERANCE:1e-9,EPSILON:Xs,is:Zs,equal:Qs,sign:function(e,t){return Qs(e,0,t)?0:Math.abs(e)/e},isInteger:function(e,t){return Qs(Math.round(e),e,t)},round:ea,roundTo:ta,floorTo:na,ceilTo:ra,toFraction:function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Xs,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1e3,r=[1,0],s=[0,1],a=Math.floor(e),i=e-a;s[0]<=n;){if(Qs(r[0]/s[0],e,t))return[r[0],s[0]];r=[a*r[0]+r[1],r[0]],s=[a*s[0]+s[1],s[0]],i=1/i-(a=Math.floor(1/i))}return[e,1]}});function aa(e){return e.reduce(((e,t)=>e+t),0)}function ia(e){return e.reduce(((e,t)=>e*t),1)}function oa(e,t){return!!f.default.isArray(e)&&(void 0===t||e.length===t)&&e.every(Zs)}function la(e){return ma(e,1/ca(e))}function ca(e){return Math.sqrt(pa(e,e))}function pa(e,t){return aa(f.default.zip(e,t).map(ia))}function ha(){var e=f.default.zip(...arguments);return e.map(aa)}function ua(e,t){return f.default.zip(e,t).map((e=>e[0]-e[1]))}function da(e){return e.map((e=>-e))}function ma(e,t){return e.map((e=>e*t))}function fa(e,t,n){return f.default.zip(e,t).every((e=>Qs(e[0],e[1],n)))}function ga(e,t,n){return!(!Qs(ca(e),0,n)&&!Qs(ca(t),0,n))||fa(e=la(e),t=la(t),n)}function va(e,t,n){return ga(e,t,n)||ga(e,da(t),n)}function ya(e){var t=ca(e),n=Math.atan2(e[1],e[0]);return n<0&&(n+=2*Math.PI),[t,n]}function ba(e){var t=ya(e);return[t[0],180*t[1]/Math.PI]}function Ea(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return[e*Math.cos(t),e*Math.sin(t)]}function wa(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return Ea(e,t*Math.PI/180)}function xa(e,t){var n=ya(e),r=n[1]+t;return Ea(n[0],r)}function Ca(e,t){var n=ba(e),r=n[1]+t;return wa(n[0],r)}function Sa(e,t){return Math.acos(pa(e,t)/(ca(e)*ca(t)))}function ka(e,t){return ma(t,pa(e,t)/pa(t,t))}function Na(e,t){return e.map(((e,n)=>ea(e,t[n]||t)))}function Ta(e,t){return e.map(((e,n)=>ta(e,t[n]||t)))}function _a(e,t){return e.map(((e,n)=>na(e,t[n]||t)))}function Oa(e,t){return e.map(((e,n)=>ra(e,t[n]||t)))}var Ma=Object.freeze({__proto__:null,is:oa,normalize:la,length:ca,dot:pa,add:ha,subtract:ua,negate:da,scale:ma,equal:fa,codirectional:ga,collinear:va,polarRadFromCart:ya,polarDegFromCart:ba,cartFromPolarRad:Ea,cartFromPolarDeg:wa,rotateRad:xa,rotateDeg:Ca,angleRad:Sa,angleDeg:function(e,t){return 180*Sa(e,t)/Math.PI},projection:ka,round:Na,roundTo:Ta,floorTo:_a,ceilTo:Oa});function Aa(e,t){var n=ua(t[1],t[0]),r=ua(e,t[0]);return ca(ua(ka(r,n),r))}function Pa(e,t){var n=ua(t[1],t[0]),r=ua(e,t[0]),s=ua(ma(ka(r,n),2),r);return ha(t[0],s)}var Da=oa,Ia=ha,Ra=ha,za=ua,La=fa,Fa=ya,Ua=ba,qa=Ea,Wa=wa,Va=Na,ja=Ta,Ba=_a,$a=Oa,Ha=Object.freeze({__proto__:null,rotateRad:function(e,t,n){return void 0===n?xa(e,t):ha(n,xa(ua(e,n),t))},rotateDeg:function(e,t,n){return void 0===n?Ca(e,t):ha(n,Ca(ua(e,n),t))},distanceToPoint:function(e,t){return ca(ua(e,t))},distanceToLine:Aa,reflectOverLine:Pa,compare:function(e,t,n){if(e.length!==t.length)return e.length-t.length;for(var r=0;r<e.length;r++)if(!Qs(e[r],t[r],n))return e[r]-t[r];return 0},is:Da,addVector:Ia,addVectors:Ra,subtractVector:za,equal:La,polarRadFromCart:Fa,polarDegFromCart:Ua,cartFromPolarRad:qa,cartFromPolarDeg:Wa,round:Va,roundTo:ja,floorTo:Ba,ceilTo:$a}),Ga=Object.freeze({__proto__:null,distanceToPoint:function(e,t){return Aa(t,e)},reflectPoint:function(e,t){return Pa(t,e)},midpoint:function(e){return[(e[0][0]+e[1][0])/2,(e[0][1]+e[1][1])/2]},equal:function(e,t,n){var r=ua(e[1],e[0]);return!!va(r,ua(t[1],t[0]),n)&&(!!La(e[0],t[0])||va(r,ua(t[0],e[0]),n))}}),Ya=Object.freeze({__proto__:null,equal:function(e,t,n){var r=ua(e[1],e[0]),s=ua(t[1],t[0]),a=La(e[0],t[0]),i=ga(r,s,n);return a&&i}});const{Graphie:Ka}=e.components,Ja=Ka.MovablePoint;class Xa extends d.Component{constructor(){var t;super(...arguments),t=this,C(this,"getUserInput",(()=>e.WidgetJsonifyDeprecated.getUserInput.call(this))),C(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),C(this,"movePoint",(e=>{this.change({coord:e})})),C(this,"_getGridConfig",(t=>f.default.map(t.step,(function(n,r){return e.Util.gridDimensionConfig(n,t.range[r],t.box[r],t.gridStep[r])})))),C(this,"setupGraphie",((e,t)=>{const n=this._getGridConfig(t);e.graphInit({range:t.range,scale:f.default.pluck(n,"scale"),axisArrows:"<->",labelFormat:function(e){return"\\small{"+e+"}"},gridStep:t.gridStep,tickStep:f.default.pluck(n,"tickStep"),labelStep:1,unityLabels:f.default.pluck(n,"unityLabel")}),e.label([0,t.range[1][1]],t.labels[1],"above")})),C(this,"simpleValidate",(e=>Xa.validate(this.getUserInput(),e)))}static validate(e,t){return null==e.coord?{type:"invalid",message:null}:Ha.equal(e.coord,t.correct)?{type:"points",earned:1,total:1,message:null}:{type:"points",earned:0,total:1,message:null}}render(){return d.createElement(Ka,{ref:"graphie",box:this.props.graph.box,range:this.props.graph.range,options:this.props.graph,setup:this.setupGraphie,setDrawingAreaAvailable:this.props.apiOptions.setDrawingAreaAvailable},d.createElement(Ja,{pointSize:5,coord:this.props.coord||[0,0],constraints:[Ja.constraints.snap(),Ja.constraints.bound()],onMove:this.movePoint}))}}C(Xa,"propTypes",{...e.Changeable.propTypes,apiOptions:e.ApiOptions.propTypes,graph:g.default.object.isRequired,coord:g.default.arrayOf(g.default.number)}),C(Xa,"defaultProps",{coord:null,graph:{box:[400,400],labels:["x","y"],range:[[-10,10],[-10,10]],step:[1,1],gridStep:[1,1],valid:!0,backgroundImage:null,markings:"grid",showProtractor:!1}});var Za={name:"example-graphie-widget",displayName:"Example Graphie Widget",hidden:!0,widget:Xa};const Qa=Za.widget;class ei extends d.Component{constructor(){var t;super(...arguments),t=this,C(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),C(this,"handleChange",(e=>{e.coord&&this.change({correct:e.coord})})),C(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){return d.createElement("div",null,d.createElement(Qa,{graph:this.props.graph,coord:this.props.correct,onChange:this.handleChange,apiOptions:this.props.apiOptions}))}}C(ei,"propTypes",{...e.Changeable.propTypes}),C(ei,"widgetName","example-graphie-widget"),C(ei,"defaultProps",{correct:[4,4],graph:{box:[340,340],labels:["x","y"],range:[[-10,10],[-10,10]],step:[1,1],gridStep:[1,1],valid:!0,backgroundImage:null,markings:"grid",showProtractor:!1}});class ti extends d.Component{constructor(){var t;super(...arguments),t=this,C(this,"handleAnswerChange",(e=>{this.change({correct:e.target.value})})),C(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),C(this,"focus",(()=>(this.refs.input.focus(),!0))),C(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){return d.createElement("div",null,d.createElement("label",null,"Correct answer:",d.createElement("input",{value:this.props.correct,onChange:this.handleAnswerChange,ref:"input"})))}}C(ti,"propTypes",{...e.Changeable.propTypes}),C(ti,"widgetName","example-widget"),C(ti,"defaultProps",{correct:""});const{TextInput:ni}=e.components;class ri extends d.Component{constructor(){var t;super(...arguments),t=this,C(this,"state",{}),C(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),C(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){return d.createElement("div",{className:"perseus-widget-explanation-editor"},d.createElement("div",{className:"perseus-widget-row"},d.createElement("label",null,"Prompt to show explanation:"," ",d.createElement(ni,{value:this.props.showPrompt,onChange:this.change("showPrompt")}))),d.createElement("div",{className:"perseus-widget-row"},d.createElement("label",null,"Prompt to hide explanation:"," ",d.createElement(ni,{value:this.props.hidePrompt,onChange:this.change("hidePrompt")}))),d.createElement("div",{className:"perseus-widget-row"},d.createElement(Un,{apiOptions:this.props.apiOptions,content:this.props.explanation,widgets:this.props.widgets,widgetEnabled:!0,immutableWidgets:!1,onChange:e=>{const t={};f.default.has(e,"content")&&(t.explanation=e.content),f.default.has(e,"widgets")&&(t.widgets=e.widgets),this.change(t)}})))}}C(ri,"propTypes",{...e.Changeable.propTypes,showPrompt:g.default.string,hidePrompt:g.default.string,explanation:g.default.string,widgets:g.default.object,apiOptions:g.default.any}),C(ri,"widgetName","explanation"),C(ri,"defaultProps",{showPrompt:"Explain",hidePrompt:"Hide explanation",explanation:"explanation goes here\n\nmore explanation",widgets:{}});var si=function(){var e=function(e,t,n,r){for(n=n||{},r=e.length;r--;n[e[r]]=t);return n},t=[1,11],n=[1,9],r=[8,17],s=[6,11],a=[6,11,13,17],i={trace:function(){},yy:{},symbols_:{error:2,unitvalue:3,magnitude:4,unit:5,EOF:6,float:7,POW:8,int:9,multatoms:10,DIV:11,expatom:12,MUL:13,atom:14,"^":15,nat:16,ATOM:17,FLOAT:18,NAT:19,NEG:20,$accept:0,$end:1},terminals_:{2:"error",6:"EOF",8:"POW",11:"DIV",13:"MUL",15:"^",17:"ATOM",18:"FLOAT",19:"NAT",20:"NEG"},productions_:[0,[3,3],[3,2],[4,3],[4,1],[5,3],[5,1],[10,3],[10,2],[10,1],[12,3],[12,1],[14,1],[7,1],[7,1],[16,1],[9,2],[9,1]],performAction:function(e,t,n,r,s,a,i){var o=a.length-1;switch(s){case 1:return{type:"unitMagnitude",magnitude:a[o-2],unit:a[o-1]};case 2:return{type:"unitStandalone",unit:a[o-1]};case 3:this.$=a[o-2]+"e"+a[o];break;case 4:case 13:case 14:case 15:case 17:this.$=a[o];break;case 5:this.$={num:a[o-2],denom:a[o]};break;case 6:this.$={num:a[o],denom:null};break;case 7:this.$=[a[o-2]].concat(a[o]);break;case 8:this.$=[a[o-1]].concat(a[o]);break;case 9:this.$=[a[o]];break;case 10:this.$={name:a[o-2],pow:a[o]};break;case 11:this.$={name:a[o],pow:1};break;case 12:this.$=e;break;case 16:this.$="-"+a[o]}},table:[{3:1,4:2,5:3,7:4,10:5,12:8,14:10,16:7,17:t,18:[1,6],19:n},{1:[3]},{5:12,10:5,12:8,14:10,17:t},{6:[1,13]},{8:[1,14],17:[2,4]},{6:[2,6],11:[1,15]},e(r,[2,13]),e(r,[2,14]),e(s,[2,9],{12:8,14:10,10:17,13:[1,16],17:t}),e([6,8,11,13,17],[2,15]),e(a,[2,11],{15:[1,18]}),e([6,11,13,15,17],[2,12]),{6:[1,19]},{1:[2,2]},{9:20,19:[1,22],20:[1,21]},{10:23,12:8,14:10,17:t},{10:24,12:8,14:10,17:t},e(s,[2,8]),{16:25,19:n},{1:[2,1]},{17:[2,3]},{19:[1,26]},{17:[2,17]},{6:[2,5]},e(s,[2,7]),e(a,[2,10]),{17:[2,16]}],defaultActions:{13:[2,2],19:[2,1],20:[2,3],22:[2,17],23:[2,5],26:[2,16]},parseError:function(e,t){if(!t.recoverable)throw new Error(e);this.trace(e)},parse:function(e){var t=this,n=[0],r=[null],s=[],a=this.table,i="",o=0,l=0,c=2,p=1,h=s.slice.call(arguments,1),u=Object.create(this.lexer),d={yy:{}};for(var m in this.yy)Object.prototype.hasOwnProperty.call(this.yy,m)&&(d.yy[m]=this.yy[m]);u.setInput(e,d.yy),d.yy.lexer=u,d.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var f=u.yylloc;s.push(f);var g=u.options&&u.options.ranges;function v(){var e;return"number"!=typeof(e=u.lex()||p)&&(e=t.symbols_[e]||e),e}"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var y,b,E,w,x,C,S,k,N={};;){if(b=n[n.length-1],this.defaultActions[b]?E=this.defaultActions[b]:(null==y&&(y=v()),E=a[b]&&a[b][y]),void 0===E||!E.length||!E[0]){var T="";for(x in k=[],a[b])this.terminals_[x]&&x>c&&k.push("'"+this.terminals_[x]+"'");T=u.showPosition?"Parse error on line "+(o+1)+":\n"+u.showPosition()+"\nExpecting "+k.join(", ")+", got '"+(this.terminals_[y]||y)+"'":"Parse error on line "+(o+1)+": Unexpected "+(y==p?"end of input":"'"+(this.terminals_[y]||y)+"'"),this.parseError(T,{text:u.match,token:this.terminals_[y]||y,line:u.yylineno,loc:f,expected:k})}if(E[0]instanceof Array&&E.length>1)throw new Error("Parse Error: multiple actions possible at state: "+b+", token: "+y);switch(E[0]){case 1:n.push(y),r.push(u.yytext),s.push(u.yylloc),n.push(E[1]),y=null,l=u.yyleng,i=u.yytext,o=u.yylineno,f=u.yylloc;break;case 2:if(C=this.productions_[E[1]][1],N.$=r[r.length-C],N._$={first_line:s[s.length-(C||1)].first_line,last_line:s[s.length-1].last_line,first_column:s[s.length-(C||1)].first_column,last_column:s[s.length-1].last_column},g&&(N._$.range=[s[s.length-(C||1)].range[0],s[s.length-1].range[1]]),void 0!==(w=this.performAction.apply(N,[i,l,o,d.yy,E[1],r,s].concat(h))))return w;C&&(n=n.slice(0,-1*C*2),r=r.slice(0,-1*C),s=s.slice(0,-1*C)),n.push(this.productions_[E[1]][0]),r.push(N.$),s.push(N._$),S=a[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},o={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,n=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var s=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var n,r,s;if(this.options.backtrack_lexer&&(s={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(s.yylloc.range=this.yylloc.range.slice(0))),(r=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],n=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in s)this[a]=s[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),a=0;a<s.length;a++)if((n=this._input.match(this.rules[s[a]]))&&(!t||n[0].length>t[0].length)){if(t=n,r=a,this.options.backtrack_lexer){if(!1!==(e=this.test_match(n,s[a])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,s[r]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(e,t,n,r){switch(n){case 0:return 11;case 1:return"(";case 2:return")";case 3:return 8;case 4:return 15;case 5:return 13;case 6:return 18;case 7:return 19;case 8:return 20;case 9:case 10:case 11:return 17;case 12:break;case 13:return 6}},rules:[/^(?:\/)/,/^(?:\()/,/^(?:\))/,/^(?:(\*|x|\u00d7|\u2219|\u22c5|\u00b7)\s*10\s*\^)/,/^(?:\^)/,/^(?:\*)/,/^(?:[0-9]+\.[0-9]+)/,/^(?:[0-9]+)/,/^(?:-)/,/^(?:\u00b0( ?)[cCfF])/,/^(?:fl\.? oz\.?)/,/^(?:[\u00b5]?([A-Za-z-]+|[\u2103\u2109\u212b]))/,/^(?:\s+)/,/^(?:$)/],conditions:{INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13],inclusive:!0}}};function l(){this.yy={}}return i.lexer=o,l.prototype=i,i.Parser=l,new l}(),ai=si,ii=function(){var e=function(e,t,n,r){for(n=n||{},r=e.length;r--;n[e[r]]=t);return n},t=[1,7],n=[1,17],r=[1,13],s=[1,14],a=[1,15],i=[1,32],o=[1,22],l=[1,23],c=[1,24],p=[1,25],h=[1,26],u=[1,33],d=[1,27],m=[1,28],f=[1,29],g=[1,30],v=[1,20],y=[1,36],b=[1,37],E=[5,6,8,10,33,35,41,43,45],w=[1,39],x=[1,40],C=[5,6,8,10,12,14,16,19,21,22,28,29,30,31,32,33,34,35,37,39,41,42,43,44,45,46],S=[10,16,19,21,22,28,29,30,31,32,34,37,39,42,43,44,46],k=[5,6,8,10,12,14,16,18,19,21,22,28,29,30,31,32,33,34,35,37,39,41,42,43,44,45,46],N={trace:function(){},yy:{},symbols_:{error:2,equation:3,expression:4,SIGN:5,EOF:6,additive:7,"+":8,multiplicative:9,"-":10,triglog:11,"*":12,negative:13,"/":14,trig:15,TRIG:16,trigfunc:17,"^":18,TRIGINV:19,logbase:20,ln:21,log:22,_:23,subscriptable:24,power:25,primitive:26,variable:27,VAR:28,CONST:29,INT:30,FLOAT:31,"{":32,"}":33,"(":34,")":35,function:36,FUNC:37,invocation:38,sqrt:39,"[":40,"]":41,abs:42,"|":43,"LEFT|":44,"RIGHT|":45,FRAC:46,$accept:0,$end:1},terminals_:{2:"error",5:"SIGN",6:"EOF",8:"+",10:"-",12:"*",14:"/",16:"TRIG",18:"^",19:"TRIGINV",21:"ln",22:"log",23:"_",28:"VAR",29:"CONST",30:"INT",31:"FLOAT",32:"{",33:"}",34:"(",35:")",37:"FUNC",39:"sqrt",40:"[",41:"]",42:"abs",43:"|",44:"LEFT|",45:"RIGHT|",46:"FRAC"},productions_:[0,[3,4],[3,2],[3,1],[4,1],[7,3],[7,3],[7,1],[9,2],[9,3],[9,3],[9,1],[13,2],[13,1],[15,1],[17,1],[17,3],[17,1],[20,1],[20,1],[20,3],[11,2],[11,2],[11,1],[25,3],[25,1],[27,1],[24,3],[24,1],[24,1],[24,1],[24,1],[24,3],[24,3],[36,1],[38,4],[38,4],[38,7],[38,4],[38,3],[38,3],[38,4],[26,1],[26,1],[26,7]],performAction:function(e,t,n,r,s,a,i){var o=a.length-1;switch(s){case 1:return new r.Eq(a[o-3],a[o-2],a[o-1]);case 2:return a[o-1];case 3:return new r.Add([]);case 4:case 7:case 11:case 13:case 15:case 20:case 23:case 25:case 42:case 43:this.$=a[o];break;case 5:this.$=r.Add.createOrAppend(a[o-2],a[o]);break;case 6:this.$=r.Add.createOrAppend(a[o-2],r.Mul.handleNegative(a[o],"subtract"));break;case 8:this.$=r.Mul.fold(r.Mul.createOrAppend(a[o-1],a[o]));break;case 9:this.$=r.Mul.fold(r.Mul.createOrAppend(a[o-2],a[o]));break;case 10:this.$=r.Mul.fold(r.Mul.handleDivide(a[o-2],a[o]));break;case 12:this.$=r.Mul.handleNegative(a[o]);break;case 14:case 17:this.$=[e];break;case 16:this.$=a[o-2].concat(a[o]);break;case 18:this.$=r.Log.natural();break;case 19:this.$=r.Log.common();break;case 21:this.$=r.Trig.create(a[o-1],a[o]);break;case 22:this.$=r.Log.create(a[o-1],a[o]);break;case 24:this.$=new r.Pow(a[o-2],a[o]);break;case 26:case 34:this.$=e;break;case 27:this.$=new r.Var(a[o-2],a[o]);break;case 28:this.$=new r.Var(a[o]);break;case 29:this.$=new r.Const(e.toLowerCase());break;case 30:this.$=r.Int.create(Number(e));break;case 31:this.$=r.Float.create(Number(e));break;case 32:this.$=a[o-1].completeParse();break;case 33:this.$=a[o-1].completeParse().addHint("parens");break;case 35:case 36:this.$=r.Pow.sqrt(a[o-1]);break;case 37:this.$=new r.Pow.nthroot(a[o-1],a[o-4]);break;case 38:case 39:case 40:this.$=new r.Abs(a[o-1]);break;case 41:this.$=new r.Func(a[o-3],a[o-1]);break;case 44:this.$=r.Mul.handleDivide(a[o-4],a[o-1])}},table:[{3:1,4:2,6:[1,3],7:4,9:5,10:t,11:8,13:6,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},{1:[3]},{5:[1,34],6:[1,35]},{1:[2,3]},e([5,6],[2,4],{8:y,10:b}),e(E,[2,7],{17:9,20:10,25:11,15:12,26:16,24:18,38:19,27:21,36:31,11:38,12:w,14:x,16:n,19:r,21:s,22:a,28:i,29:o,30:l,31:c,32:p,34:h,37:u,39:d,42:m,44:g,46:v}),e(C,[2,11]),{10:t,11:8,13:41,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},e(C,[2,13]),{10:t,11:8,13:42,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},{10:t,11:8,13:43,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},e(C,[2,23]),e(S,[2,15],{18:[1,44]}),e(S,[2,17]),e(S,[2,18]),e(S,[2,19],{23:[1,45]}),e(C,[2,25],{18:[1,46]}),e([10,16,18,19,21,22,28,29,30,31,32,34,37,39,42,43,44,46],[2,14]),e(k,[2,42]),e(k,[2,43]),{32:[1,47]},e(k,[2,28],{23:[1,48]}),e(k,[2,29]),e(k,[2,30]),e(k,[2,31]),{7:49,9:5,10:t,11:8,13:6,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},{7:50,9:5,10:t,11:8,13:6,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},{32:[1,52],34:[1,51],40:[1,53]},{34:[1,54]},{7:55,9:5,10:t,11:8,13:6,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},{7:56,9:5,10:t,11:8,13:6,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},{34:[1,57]},e([5,6,8,10,12,14,16,18,19,21,22,23,28,29,30,31,32,33,34,35,37,39,41,42,43,44,45,46],[2,26]),{34:[2,34]},{4:58,7:4,9:5,10:t,11:8,13:6,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},{1:[2,2]},{9:59,10:t,11:8,13:6,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},{9:60,10:t,11:8,13:6,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},e(C,[2,8]),{10:t,11:8,13:61,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},{10:t,11:8,13:62,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},e(C,[2,12]),e(C,[2,21]),e(C,[2,22]),{10:t,11:8,13:63,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},{24:64,27:21,28:i,29:o,30:l,31:c,32:p,34:h},{10:t,11:8,13:65,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},{7:66,9:5,10:t,11:8,13:6,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},{24:67,27:21,28:i,29:o,30:l,31:c,32:p,34:h},{8:y,10:b,33:[1,68]},{8:y,10:b,35:[1,69]},{7:70,9:5,10:t,11:8,13:6,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},{7:71,9:5,10:t,11:8,13:6,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},{7:72,9:5,10:t,11:8,13:6,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},{7:73,9:5,10:t,11:8,13:6,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},{8:y,10:b,43:[1,74]},{8:y,10:b,45:[1,75]},{7:76,9:5,10:t,11:8,13:6,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},{6:[1,77]},e(E,[2,5],{17:9,20:10,25:11,15:12,26:16,24:18,38:19,27:21,36:31,11:38,12:w,14:x,16:n,19:r,21:s,22:a,28:i,29:o,30:l,31:c,32:p,34:h,37:u,39:d,42:m,44:g,46:v}),e(E,[2,6],{17:9,20:10,25:11,15:12,26:16,24:18,38:19,27:21,36:31,11:38,12:w,14:x,16:n,19:r,21:s,22:a,28:i,29:o,30:l,31:c,32:p,34:h,37:u,39:d,42:m,44:g,46:v}),e(C,[2,9]),e(C,[2,10]),e(S,[2,16]),e(S,[2,20]),e(C,[2,24]),{8:y,10:b,33:[1,78]},e(k,[2,27]),e(k,[2,32]),e(k,[2,33]),{8:y,10:b,35:[1,79]},{8:y,10:b,33:[1,80]},{8:y,10:b,41:[1,81]},{8:y,10:b,35:[1,82]},e(k,[2,39]),e(k,[2,40]),{8:y,10:b,35:[1,83]},{1:[2,1]},{32:[1,84]},e(k,[2,35]),e(k,[2,36]),{32:[1,85]},e(k,[2,38]),e(k,[2,41]),{7:86,9:5,10:t,11:8,13:6,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},{7:87,9:5,10:t,11:8,13:6,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},{8:y,10:b,33:[1,88]},{8:y,10:b,33:[1,89]},e(k,[2,44]),e(k,[2,37])],defaultActions:{3:[2,3],33:[2,34],35:[2,2],77:[2,1]},parseError:function(e,t){if(!t.recoverable)throw new Error(e);this.trace(e)},parse:function(e){var t=this,n=[0],r=[null],s=[],a=this.table,i="",o=0,l=0,c=2,p=1,h=s.slice.call(arguments,1),u=Object.create(this.lexer),d={yy:{}};for(var m in this.yy)Object.prototype.hasOwnProperty.call(this.yy,m)&&(d.yy[m]=this.yy[m]);u.setInput(e,d.yy),d.yy.lexer=u,d.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var f=u.yylloc;s.push(f);var g=u.options&&u.options.ranges;function v(){var e;return"number"!=typeof(e=u.lex()||p)&&(e=t.symbols_[e]||e),e}"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var y,b,E,w,x,C,S,k,N={};;){if(b=n[n.length-1],this.defaultActions[b]?E=this.defaultActions[b]:(null==y&&(y=v()),E=a[b]&&a[b][y]),void 0===E||!E.length||!E[0]){var T="";for(x in k=[],a[b])this.terminals_[x]&&x>c&&k.push("'"+this.terminals_[x]+"'");T=u.showPosition?"Parse error on line "+(o+1)+":\n"+u.showPosition()+"\nExpecting "+k.join(", ")+", got '"+(this.terminals_[y]||y)+"'":"Parse error on line "+(o+1)+": Unexpected "+(y==p?"end of input":"'"+(this.terminals_[y]||y)+"'"),this.parseError(T,{text:u.match,token:this.terminals_[y]||y,line:u.yylineno,loc:f,expected:k})}if(E[0]instanceof Array&&E.length>1)throw new Error("Parse Error: multiple actions possible at state: "+b+", token: "+y);switch(E[0]){case 1:n.push(y),r.push(u.yytext),s.push(u.yylloc),n.push(E[1]),y=null,l=u.yyleng,i=u.yytext,o=u.yylineno,f=u.yylloc;break;case 2:if(C=this.productions_[E[1]][1],N.$=r[r.length-C],N._$={first_line:s[s.length-(C||1)].first_line,last_line:s[s.length-1].last_line,first_column:s[s.length-(C||1)].first_column,last_column:s[s.length-1].last_column},g&&(N._$.range=[s[s.length-(C||1)].range[0],s[s.length-1].range[1]]),void 0!==(w=this.performAction.apply(N,[i,l,o,d.yy,E[1],r,s].concat(h))))return w;C&&(n=n.slice(0,-1*C*2),r=r.slice(0,-1*C),s=s.slice(0,-1*C)),n.push(this.productions_[E[1]][0]),r.push(N.$),s.push(N._$),S=a[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},T={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,n=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var s=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var n,r,s;if(this.options.backtrack_lexer&&(s={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(s.yylloc.range=this.yylloc.range.slice(0))),(r=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],n=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in s)this[a]=s[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),a=0;a<s.length;a++)if((n=this._input.match(this.rules[s[a]]))&&(!t||n[0].length>t[0].length)){if(t=n,r=a,this.options.backtrack_lexer){if(!1!==(e=this.test_match(n,s[a])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,s[r]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{flex:!0},performAction:function(e,t,n,r){switch(n){case 0:case 1:case 2:break;case 3:return"INT";case 4:return"FLOAT";case 5:case 15:return"^";case 6:case 7:case 8:case 9:return"*";case 10:case 11:return"/";case 12:case 13:return"-";case 14:return"+";case 16:case 18:return"(";case 17:case 19:return")";case 20:return"[";case 21:return"]";case 22:case 24:return"{";case 23:case 25:return"}";case 26:return"_";case 27:return"|";case 28:return"LEFT|";case 29:return"RIGHT|";case 30:return"!";case 31:return"SIGN";case 32:case 34:case 40:return t.yytext="<=","SIGN";case 33:case 35:case 41:return t.yytext=">=","SIGN";case 36:case 37:case 38:case 39:return t.yytext="<>","SIGN";case 42:case 43:return"FRAC";case 44:return"sqrt";case 45:return"abs";case 46:return"ln";case 47:return"log";case 48:case 49:case 50:case 51:return"TRIG";case 52:return t.yytext="sin","TRIG";case 53:return t.yytext="cos","TRIG";case 54:return t.yytext="tan","TRIG";case 55:return t.yytext="csc","TRIG";case 56:return t.yytext="sec","TRIG";case 57:return t.yytext="cot","TRIG";case 58:return t.yytext="arcsin","TRIG";case 59:return t.yytext="arccos","TRIG";case 60:return t.yytext="arctan","TRIG";case 61:return t.yytext="arccsc","TRIG";case 62:return t.yytext="arcsec","TRIG";case 63:return t.yytext="arccot","TRIG";case 64:case 65:return"TRIGINV";case 66:return t.yytext="sinh","TRIG";case 67:return t.yytext="cosh","TRIG";case 68:case 71:return t.yytext="tanh","TRIG";case 69:return t.yytext="csch","TRIG";case 70:return t.yytext="sech","TRIG";case 72:return"CONST";case 73:case 74:return t.yytext="pi","CONST";case 75:case 78:return"VAR";case 76:case 77:return t.yytext="theta","VAR";case 79:case 80:return t.yytext="phi","VAR";case 81:return e.symbolLexer(t.yytext);case 82:return"EOF";case 83:return"INVALID";case 84:console.log(t.yytext)}},rules:[/^(?:\s+)/,/^(?:\\space)/,/^(?:\\ )/,/^(?:[0-9]+\.?)/,/^(?:([0-9]+)?\.[0-9]+)/,/^(?:\*\*)/,/^(?:\*)/,/^(?:\\cdot|·)/,/^(?:\\times|×)/,/^(?:\\ast)/,/^(?:\/)/,/^(?:\\div|÷)/,/^(?:-)/,/^(?:−)/,/^(?:\+)/,/^(?:\^)/,/^(?:\()/,/^(?:\))/,/^(?:\\left\()/,/^(?:\\right\))/,/^(?:\[)/,/^(?:\])/,/^(?:\{)/,/^(?:\})/,/^(?:\\left\{)/,/^(?:\\right\})/,/^(?:_)/,/^(?:\|)/,/^(?:\\left\|)/,/^(?:\\right\|)/,/^(?:\!)/,/^(?:<=|>=|<>|<|>|=)/,/^(?:\\le)/,/^(?:\\ge)/,/^(?:\\leq)/,/^(?:\\geq)/,/^(?:=\/=)/,/^(?:\\ne)/,/^(?:\\neq)/,/^(?:≠)/,/^(?:≤)/,/^(?:≥)/,/^(?:\\frac)/,/^(?:\\dfrac)/,/^(?:sqrt|\\sqrt)/,/^(?:abs|\\abs)/,/^(?:ln|\\ln)/,/^(?:log|\\log)/,/^(?:sin|cos|tan)/,/^(?:csc|sec|cot)/,/^(?:sinh|cosh|tanh)/,/^(?:csch|sech|coth)/,/^(?:\\sin)/,/^(?:\\cos)/,/^(?:\\tan)/,/^(?:\\csc)/,/^(?:\\sec)/,/^(?:\\cot)/,/^(?:\\arcsin)/,/^(?:\\arccos)/,/^(?:\\arctan)/,/^(?:\\arccsc)/,/^(?:\\arcsec)/,/^(?:\\arccot)/,/^(?:arcsin|arccos|arctan)/,/^(?:arccsc|arcsec|arccot)/,/^(?:\\sinh)/,/^(?:\\cosh)/,/^(?:\\tanh)/,/^(?:\\csch)/,/^(?:\\sech)/,/^(?:\\coth)/,/^(?:pi)/,/^(?:π)/,/^(?:\\pi)/,/^(?:theta)/,/^(?:θ)/,/^(?:\\theta)/,/^(?:phi)/,/^(?:φ)/,/^(?:\\phi)/,/^(?:[a-zA-Z])/,/^(?:$)/,/^(?:.)/,/^(?:.)/],conditions:{INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84],inclusive:!0}}};function _(){this.yy={}}return N.lexer=T,_.prototype=N,N.Parser=_,new _}(),oi=function(){throw new Error("Abstract method - must override for expr: "+this.print())},li=function(e){throw new Error(e)},ci=function(e){return e!=e};function pi(){}function hi(){}function ui(){this.terms=1===arguments.length?arguments[0]:f.default.toArray(arguments)}function di(){this.terms=1===arguments.length?arguments[0]:f.default.toArray(arguments)}function mi(e,t){this.base=e,this.exp=t}function fi(e,t){this.base=e,this.power=t}function gi(e,t){this.type=e,this.arg=t}function vi(e){this.arg=e}function yi(e,t,n){this.left=e,this.type=t,this.right=n}function bi(){}function Ei(e,t){this.symbol=e,this.arg=t}function wi(e,t){this.symbol=e,this.subscript=t}function xi(e){this.symbol=e}function Ci(){}function Si(e,t){var n=e,r=t;r<0&&(n=-n,r=-r),this.n=n,this.d=r}function ki(e){this.n=e}function Ni(e){this.n=e}f.default.extend(pi.prototype,{func:oi,args:oi,construct:function(e){var t=new this.func;return this.func.apply(t,e),t},recurse:function(e){var t=Array.prototype.slice.call(arguments,1),n=f.default.map(this.args(),(function(n){return f.default.isString(n)?n:n[e].apply(n,t)}));return this.construct(n)},eval:oi,codegen:oi,compile:function(){var e=this.codegen();try{return new Function("vars","return "+e+";")}catch(t){throw new Error("Function did not compile: "+e)}},print:oi,tex:oi,asTex:function(e){e=e||{},f.default.defaults(e,{display:!0,dynamic:!0,times:!1});var t=this.tex();return e.display&&(t="\\displaystyle "+t),e.dynamic&&(t=(t=t.replace(/\(/g,"\\left(")).replace(/\)/g,"\\right)")),e.times&&(t=t.replace(/\\cdot/g,"\\times")),t},name:function(){return this.func.name?this.func.name:this.func.toString().match(/^function\s*([^\s(]+)/)[1]},repr:function(){return this.name()+"("+f.default.map(this.args(),(function(e){return f.default.isString(e)?e:e.repr()})).join(",")+")"},strip:function(){return this.recurse("strip")},normalize:function(){return this.recurse("normalize")},expand:function(){return this.recurse("expand")},factor:function(e){return this.recurse("factor",e)},collect:function(e){return this.recurse("collect",e)},equals:function(e){return this.normalize().print()===e.normalize().print()},simplify:function(e){e=f.default.extend({once:!1},e);var t=this.factor(e),n=t.collect(e);t.equals(n)&&(n=this.collect(e));var r=n.expand(e),s=r.collect(e);r.equals(s)&&(s=n.collect(e));var a=s;return e.once||this.equals(a)?a:a.simplify(e)},isSimplified:function(){return this.equals(this.simplify())},exprArgs:function(){return f.default.filter(this.args(),(function(e){return e instanceof pi}))},getVars:function(e){return f.default.uniq(f.default.flatten(f.default.invoke(this.exprArgs(),"getVars",e))).sort()},getConsts:function(){return f.default.uniq(f.default.flatten(f.default.invoke(this.exprArgs(),"getConsts"))).sort()},getUnits:function(){return f.default.flatten(f.default.invoke(this.exprArgs(),"getUnits"))},is:function(e){return this instanceof e},has:function(e){return this instanceof e||f.default.any(this.exprArgs(),(function(t){return t.has(e)}))},raiseToThe:function(e){return new mi(this,e)},isSubtract:function(){return!1},isDivide:function(){return!1},isRoot:function(){return!1},needsExplicitMul:function(){return this.args()[0].needsExplicitMul()},sameVars:function(e){var t=this.getVars(),n=e.getVars(),r=function(e,t){return!f.default.difference(e,t).length},s=function(e){return f.default.uniq(f.default.invoke(e,"toLowerCase")).sort()};return{equal:r(t,n),equalIgnoringCase:r(s(t),s(n))}},compare:function(e){if(e instanceof yi)return!1;var t=f.default.union(this.getVars(!0),e.getVars(!0)),n=function(e,t){var n=function(e,t){return Math.abs(e)<1||Math.abs(t)<1?Math.abs(e-t):Math.abs(1-e/t)}(e,t);return e===t||ci(e)&&ci(t)||n<Math.pow(10,-9)};if(!t.length&&!this.has(_i)&&!e.has(_i))return n(this.eval(),e.eval());var r=this.collect(),s=e.collect(),a=this.getUnits(),i=e.getUnits();if(!f.default.isEqual(a,i))return!1;for(var o=0;o<12;o++){var l,c={},p=Math.pow(10,1+Math.floor(3*o/12)),h=o%2==0;if(f.default.each(t,(function(e){var t,n;c[e]=h?(n=p-(t=-p),Math.random()*n+t):f.default.random(-p,p)})),r.has(Ei)||s.has(Ei)||r.has(_i)||s.has(_i)){var u=r.partialEval(c),d=s.partialEval(c);l=u.simplify().equals(d.simplify())}else l=n(u=r.eval(c),d=s.eval(c));if(!l)return!1}return!0},partialEval:function(e){return this instanceof _i?this:this.has(Ei)?this instanceof Ei?new Ei(this.symbol,this.arg.partialEval(e)):this.recurse("partialEval",e):new Ni(this.eval(e).toFixed(9)).collect()},sameForm:function(e){return this.strip().equals(e.strip())},findGCD:function(e){return this.equals(e)?e:Ci.One},getDenominator:function(){return Ci.One},asMul:function(){return new di(Ci.One,this)},isPositive:oi,isNegative:function(){return!1},asPositiveFactor:function(){return this.isPositive()?this:Ci.One},addHint:function(e){if(!e)return this;var t=this.construct(this.args());return t.hints=f.default.clone(this.hints),t.hints[e]=!0,t},hints:{parens:!1},asExpr:function(){return this},completeParse:function(){return this.recurse("completeParse")},abs:oi,negate:function(){return new di(Ci.Neg,this)}}),hi.prototype=new pi,f.default.extend(hi.prototype,{args:function(){return this.terms},normalize:function(){var e=f.default.sortBy(f.default.invoke(this.terms,"normalize"),(function(e){return e.print()}));return new this.func(e)},expand:function(){return this.recurse("expand").flatten()},partition:function(){var e=f.default.groupBy(this.terms,(function(e){return e instanceof Ci})),t=e[!0]||[],n=e[!1]||[];return[new this.func(t),new this.func(n)]},flatten:function(){var e=this,t=f.default.reject(this.terms,(function(t){return t.equals(e.identity)}));if(0===t.length)return e.identity;if(1===t.length)return t[0];var n=f.default.groupBy(t,(function(t){return t instanceof e.func})),r=n[!0]||[],s=(n[!1]||[]).concat(f.default.flatten(f.default.pluck(r,"terms"),!0));return new e.func(s)},identity:void 0,reduce:oi,isPositive:function(){var e=f.default.invoke(this.terms,"collect");return f.default.all(f.default.invoke(e,"isPositive"))},replace:function(e,t){var n;n=e instanceof pi?f.default.indexOf(this.terms,e):e;var r=[];f.default.isArray(t)?r=t:t&&(r=[t]);var s=this.terms.slice(0,n).concat(r).concat(this.terms.slice(n+1));return new this.func(s)},remove:function(e){return this.replace(e)},getDenominator:function(){return new di(f.default.invoke(this.terms,"getDenominator")).flatten()}}),ui.prototype=new hi,f.default.extend(ui.prototype,{func:ui,eval:function(e,t){return f.default.reduce(this.terms,(function(n,r){return n+r.eval(e,t)}),0)},codegen:function(){return f.default.map(this.terms,(function(e){return"("+e.codegen()+")"})).join(" + ")||"0"},print:function(){return f.default.invoke(this.terms,"print").join("+")},tex:function(){var e="";return f.default.each(this.terms,(function(t){!e||t.isSubtract()?e+=t.tex():e+="+"+t.tex()})),e},collect:function(e){var t=f.default.invoke(this.terms,"collect",e),n=[];f.default.each(t,(function(t){if(t instanceof di){var r=t.partition();n.push([r[1].flatten(),r[0].reduce(e)])}else t instanceof Ci?n.push([Ci.One,t]):n.push([t,Ci.One])}));var r=f.default.groupBy(n,(function(e){return e[0].normalize().print()})),s=f.default.compact(f.default.map(r,(function(t){var n=t[0][0];return new di(new ui(f.default.zip.apply(f.default,t)[1]).reduce(e),n).collect(e)})));return new ui(s).flatten()},factor:function(e){e=f.default.extend({keepNegative:!1},e);var t,n=f.default.invoke(this.terms,"collect");t=n[0]instanceof di?n[0].terms:[n[0]],f.default.each(f.default.rest(this.terms),(function(e){t=f.default.map(t,(function(t){return e.findGCD(t)}))})),!e.keepNegative&&this.isNegative()&&t.push(Ci.Neg),t=new di(t).flatten().collect();var r=f.default.map(n,(function(e){return di.handleDivide(e,t).simplify()}));return r=new ui(r).flatten(),di.createOrAppend(t,r).flatten()},reduce:function(e){return f.default.reduce(this.terms,(function(t,n){return t.add(n,e)}),this.identity)},needsExplicitMul:function(){return!1},isNegative:function(){var e=f.default.invoke(this.terms,"collect");return f.default.all(f.default.invoke(e,"isNegative"))},negate:function(){return new ui(f.default.invoke(this.terms,"negate"))}}),di.prototype=new hi,f.default.extend(di.prototype,{func:di,eval:function(e,t){return f.default.reduce(this.terms,(function(n,r){return n*r.eval(e,t)}),1)},codegen:function(){return f.default.map(this.terms,(function(e){return"("+e.codegen()+")"})).join(" * ")||"0"},print:function(){return f.default.map(this.terms,(function(e){return e instanceof ui?"("+e.print()+")":e.print()})).join("*")},getUnits:function(){var e=f.default(this.terms).chain().map((function(e){return e.getUnits()})).flatten().value();return e.sort(((e,t)=>e.unit.localeCompare(t.unit))),e},tex:function(){for(var e,t=" \\cdot ",n=f.default.groupBy(this.terms,(function(e){return e.isDivide()?"inverse":e instanceof Ci?"number":"other"})),r=n.inverse||[],s=n.number||[],a=n.other||[],i="",o=0;o<s.length;o++)if(s[o]instanceof Si&&!(s[o]instanceof ki)&&a.length>0&&r.length>0){var l=s.slice();l.splice(o,1);var c=l.concat(r).concat(a);return s[o].tex()+new di(c).tex()}if(0===(s=f.default.compact(f.default.map(s,(function(e){var t=e instanceof Si&&!(e instanceof ki),n=!e.hints.fraction||r.length>0;if(t&&n){r.push(new mi(new ki(e.d),Ci.Div));var s=new ki(e.n);return s.hints=e.hints,f.default.any(e.hints)?s:null}return e})))).length&&1===a.length)e=a[0].tex();else{var p="";f.default.each(s,(function(e){e.hints.subtract&&e.hints.entered?(i+="-",p+=(p?t:"")+e.abs().tex()):e instanceof ki&&-1===e.n&&(e.hints.negate||e.hints.subtract)?i+="-":p+=(p?t:"")+e.tex()})),f.default.each(a,(function(e){e.needsExplicitMul()?p+=(p?t:"")+e.tex():p+=e instanceof ui?"("+e.tex()+")":e.tex()})),e=p||"1"}if(r.length){var h=new di(f.default.invoke(r,"asDivide")).flatten().tex();return i+"\\frac{"+e+"}{"+h+"}"}return i+e},strip:function(){return new di(f.default.map(this.terms,(function(e){return e instanceof Ci?e.abs():e.strip()}))).flatten()},expand:function(){var e=function(e){return e instanceof ui},t=function(e){return e instanceof mi&&e.exp.isNegative()},n=this.recurse("expand").flatten(),r=f.default.any(n.terms,e),s=f.default.any(n.terms,(function(n){return t(n)&&e(n.base)}));if(!r&&!s)return n;var a=f.default.groupBy(n.terms,t),i=a[!1]||[],o=a[!0]||[];if(r){var l=f.default.groupBy(i,e),c=l[!0]||[],p=l[!1]||[],h=f.default.reduce(c,(function(e,t){return f.default.reduce(e,(function(e,n){return e.concat(f.default.map(t.terms,(function(e){return n.concat(e)})))}),[])}),[[]]);i=[new ui(f.default.map(h,(function(e){return new di(p.concat(e)).flatten()})))]}return s&&(o=[new mi(new di(f.default.invoke(o,"getDenominator")).flatten().expand(),Ci.Div)]),new di(i.concat(o)).flatten()},factor:function(e){var t=this.recurse("factor",e).flatten();if(!(t instanceof di))return t;var n=f.default.groupBy(t.terms,(function(e){return e instanceof Si})),r=f.default.reduce(n[!0],(function(e,t){return{n:e.n*t.n,d:e.d*t.d}}),{n:1,d:1});return r=1===r.d?new ki(r.n):new Si(r.n,r.d),new di((n[!1]||[]).concat(r)).flatten()},collect:function(e){var t=this.recurse("collect",e).partition(),n=t[0].reduce(e);if(0===n.eval())return Ci.Zero;var r=t[1].flatten();if(!(r instanceof di))return new di(n,r).flatten();r=r.terms;var s=[];f.default.each(r,(function(e){e instanceof mi?s.push([e.base,e.exp]):s.push([e,Ci.One])}));var a=f.default.groupBy(s,(function(e){return e[0].normalize().print()})),i=f.default.compact(f.default.map(a,(function(t){var n=t[0][0],r=new ui(f.default.zip.apply(f.default,t)[1]).collect(e);return r instanceof Ci&&0===r.eval()?null:[n,r]}))),o=(s=f.default.groupBy(i,(function(e){return e[0]instanceof gi&&e[0].isBasic()?"trig":e[0]instanceof fi?"log":"expr"}))).trig||[],l=s.log||[],c=s.expr||[];if(o.length>1){var p=f.default.groupBy(o,(function(e){return e[0].arg.normalize().print()}));o=[],f.default.each(p,(function(t){var n=t[0][0].arg,r={sin:Ci.Zero,cos:Ci.Zero};f.default.each(t,(function(e){r[e[0].type]=e[1]})),di.handleNegative(r.sin).collect(e).equals(r.cos)&&(r=r.cos.isNegative()?{tan:r.sin}:{cot:r.cos}),f.default.each(r,(function(e,t){o.push([new gi(t,n),e])}))}))}if(l.length>1){var h=f.default.groupBy(l,(function(e){return e[0].base.normalize().print()}));l=[],f.default.each(h,(function(t){2===t.length&&di.handleNegative(t[0][1]).collect(e).equals(t[1][1])?t[0][1].isNegative()?l.push([new fi(t[0][0].power,t[1][0].power),t[1][1]]):l.push([new fi(t[1][0].power,t[0][0].power),t[0][1]]):l=l.concat(t)}))}s=o.concat(l).concat(c);var u=f.default.map(s,(function(t){return new mi(t[0],t[1]).collect(e)}));return new di([n].concat(u)).flatten()},isSubtract:function(){return f.default.any(this.terms,(function(e){return e instanceof Ci&&e.hints.subtract}))},factorIn:function(e){var t=this.partition()[0].terms,n=t.length&&f.default.all(t,(function(e){return e.n>0}));if(n){var r=t[0].negate();return r.hints=t[0].hints,this.replace(t[0],r.addHint(e))}return new di([Ci.negativeOne(e)].concat(this.terms))},factorOut:function(){var e=!1,t=f.default.compact(f.default.map(this.terms,(function(t,n,r){return!e&&t instanceof Ci&&t.hints.divide?(e=!0,-1!==t.n?t.negate():null):t})));return 1===t.length?t[0]:new di(t)},reduce:function(e){return f.default.reduce(this.terms,(function(t,n){return t.mul(n,e)}),this.identity)},findGCD:function(e){return new di(f.default.invoke(this.terms,"findGCD",e)).flatten()},asMul:function(){return this},asPositiveFactor:function(){return this.isPositive()?this:new di(f.default.invoke(this.collect().terms,"asPositiveFactor")).flatten()},isNegative:function(){return f.default.any(f.default.invoke(this.collect().terms,"isNegative"))},fold:function(){return di.fold(this)},negate:function(){var e=function(e){return e instanceof Ci};if(f.default.any(this.terms,e)){var t=f.default.find(this.terms,e);return this.replace(t,t.negate())}return new di([Ci.Neg].concat(this.terms))}}),f.default.each([ui,di],(function(e){f.default.extend(e,{createOrAppend:function(t,n){return t instanceof e?new e(t.terms.concat(n)):new e(t,n)}})})),f.default.extend(di,{handleNegative:function(e,t){if(e instanceof Ci&&e.n>0){var n=e.negate();return n.hints=e.hints,n.addHint(t)}return e instanceof di?e.factorIn(t):new di(Ci.negativeOne(t),e)},handleDivide:function(e,t){if(t instanceof di){var n=di.handleDivide(e,t.terms[0]),r=new di(f.default.rest(t.terms)).flatten();return di.handleDivide(n,r)}var s=function(e){return e instanceof ki};if(s(t)&&e instanceof di&&f.default.any(e.terms,s)){var a=e.terms.slice().reverse(),i=f.default.find(a,(function(e){return e instanceof Si}));if(!s(i))return new di(e.terms.concat([new Si(1,t.n).addHint("fraction")]));var o=new Si(i.n,t.n);return o.hints=i.hints,i===a[0]&&(o=o.addHint("fraction")),i.n<0&&t.n<0?(o.d=-o.d,e.replace(i,[Ci.Neg,o])):e.replace(i,o)}var l=function(e,t){if(t instanceof ki){if(e instanceof ki)return e.n<0&&t.n<0?[Ci.Neg,new Si(e.n,-t.n).addHint("fraction")]:[new Si(e.n,t.n).addHint("fraction")];var n=new Si(1,t.eval());return t.eval()<0?[e,n.addHint("negate")]:[e,n]}var r;if(t instanceof gi&&t.exp){var s=t.exp;t.exp=void 0,t=new mi(t,s)}return r=t instanceof mi?new mi(t.base,di.handleNegative(t.exp,"divide")):new mi(t,Ci.Div),e instanceof ki&&1===e.n?[r]:[e,r]};if(e instanceof di){var c=l(f.default.last(e.terms),t);return new di(f.default.initial(e.terms).concat(c))}return new di(c=l(e,t)).flatten()},fold:function(e){if(e instanceof di){var t=f.default.find(f.default.initial(e.terms),(function(e){return(e instanceof gi||e instanceof fi)&&e.hints.open})),n=f.default.indexOf(e.terms,t);if(t){var r,s=f.default.last(e.terms);if(!(t.hints.parens||s.hints.parens||s.has(gi)||s.has(fi)))return r=t instanceof gi?gi.create([t.type,t.exp],di.createOrAppend(t.arg,s).fold()):fi.create(t.base,di.createOrAppend(t.power,s).fold()),0===n?r:new di(e.terms.slice(0,n).concat(r)).fold();t.hints.open=!1}var a=e.partition()[0].terms,i=function(e){return e.n>0},o=function(e){return-1===e.n&&e.hints.negate};if(a.length>1&&f.default.some(a,o)&&f.default.some(a,i)&&f.default.every(a,(function(e){return i(e)||o(e)}))){var l=f.default.indexOf(e.terms,f.default.find(e.terms,o)),c=f.default.indexOf(e.terms,f.default.find(e.terms,i));if(l<c)return e.replace(c,e.terms[c].negate()).remove(l)}}return e}}),mi.prototype=new pi,f.default.extend(mi.prototype,{func:mi,args:function(){return[this.base,this.exp]},eval:function(e,t){var n=this.base.eval(e,t),r=this.exp.eval(e,t);if(n<0){var s=this.exp.simplify();if(s instanceof Ni){var a=s.n,i=(a-a.toFixed()).toString().length-2,o=Math.pow(10,i);s=new Si(a*o,o).simplify()}if(s instanceof Si&&Math.abs(s.d)%2==1)return(Math.abs(s.n)%2==1?-1:1)*Math.pow(-1*n,r)}return Math.pow(n,r)},getUnits:function(){return this.base.getUnits().map(function(e){return{unit:e.unit,pow:e.pow*this.exp.n}}.bind(this))},codegen:function(){return"Math.pow("+this.base.codegen()+", "+this.exp.codegen()+")"},print:function(){var e=this.base.print();return(this.base instanceof hi||this.base instanceof mi)&&(e="("+e+")"),e+"^("+this.exp.print()+")"},tex:function(){if(this.isDivide())return"\\frac{1}{"+this.asDivide().tex()+"}";if(this.isRoot())return 1!==this.exp.n&&li("Node marked with hint 'root' does not have exponent of form 1/x."),2===this.exp.d?"\\sqrt{"+this.base.tex()+"}":"\\sqrt["+this.exp.d+"]{"+this.base.tex()+"}";if(this.base instanceof gi&&!this.base.isInverse()&&this.exp instanceof Ci&&this.exp.isSimple()&&this.exp.eval()>=0){var e=this.base.tex({split:!0});return e[0]+"^{"+this.exp.tex()+"}"+e[1]}var t=this.base.tex();return this.base instanceof hi||this.base instanceof mi||this.base instanceof Ci&&!this.base.isSimple()?t="("+t+")":(this.base instanceof gi||this.base instanceof fi)&&(t="["+t+"]"),t+"^{"+this.exp.tex()+"}"},needsExplicitMul:function(){return!this.isRoot()&&this.base.needsExplicitMul()},expand:function(){var e=this.recurse("expand");if(e.base instanceof di)return new di(f.default.map(e.base.terms,(function(t){return new mi(t,e.exp)}))).expand();if(e.base instanceof ui&&e.exp instanceof ki&&e.exp.abs().eval()>1){for(var t=e.exp.eval()>0,n=e.exp.abs().eval(),r=function(e){return t?e:new mi(e,Ci.Div)},s={1:e.base},a=2;a<=n;a*=2){var i=new di(s[a/2],s[a/2]);s[a]=i.expand().collect()}if(f.default.has(s,n))return r(s[n]);var o=f.default.map(n.toString(2).split(""),(function(e,t,n){return Number(e)*Math.pow(2,n.length-t-1)}));return o=f.default.without(o,0),r(i=new di(f.default.pick(s,o)).expand().collect())}return e.exp instanceof ui?new di(f.default.map(e.exp.terms,(function(t){return new mi(e.base,t).expand()}))).expand():e},factor:function(){var e=this.recurse("factor");return e.base instanceof di?new di(f.default.map(e.base.terms,(function(t){return t instanceof ki&&e.exp.equals(Ci.Div)?new Si(1,t.n):new mi(t,e.exp)}))):e},collect:function(e){if(this.base instanceof mi)return new mi(this.base.base,s=di.createOrAppend(this.base.exp,this.exp)).collect(e);var t=this.recurse("collect",e),n=function(e){return e instanceof fi&&e.base.equals(t.base)};if(t.exp instanceof Ci&&0===t.exp.eval())return Ci.One;if(t.exp instanceof Ci&&1===t.exp.eval())return t.base;if(n(t.exp))return t.exp.power;if(t.exp instanceof di&&f.default.any(t.exp.terms,n)){var r=f.default.find(t.exp.terms,n);return new mi(r.power,s=t.exp.remove(r).flatten()).collect(e)}if(t.base instanceof Ci&&t.exp instanceof Ci){if(e&&e.preciseFloats){var s=t.exp.asRational(),a=t.base.getDecimalPlaces();if(new mi(t.base,new Si(1,s.d)).collect().getDecimalPlaces()>a){var i=new mi(t.base,new ki(s.n)).collect();return new mi(i,new Si(1,s.d))}}return t.base.raiseToThe(t.exp,e)}return t},isDivide:function(){var e=function(e){return e instanceof Ci&&e.hints.divide};return e(this.exp)||this.exp instanceof di&&f.default.any(this.exp.terms,e)},asDivide:function(){if(this.exp instanceof Ci){if(-1===this.exp.eval())return this.base;var e=this.exp.negate();return e.hints=f.default.clone(this.exp.hints),e.hints.divide=!1,new mi(this.base,e)}if(this.exp instanceof di)return new mi(this.base,this.exp.factorOut());li("called asDivide() on an Expr that wasn't a Num or Mul")},isRoot:function(){return this.exp instanceof Si&&this.exp.hints.root},isSquaredTrig:function(){return this.base instanceof gi&&!this.base.isInverse()&&this.exp instanceof Ci&&2===this.exp.eval()},getDenominator:function(){if(this.exp instanceof Ci&&-1===this.exp.eval())return di.createOrAppend(this.base,this.base.getDenominator()).flatten();if(this.exp.isNegative()){var e=new mi(this.base,di.handleNegative(this.exp).collect());return di.createOrAppend(e,e.collect().getDenominator()).flatten()}return this.base instanceof Ci?new mi(this.base.getDenominator(),this.exp).collect():Ci.One},findGCD:function(e){var t,n;if(e instanceof mi?(t=e.base,n=e.exp):(t=e,n=Ci.One),this.base.equals(t)){if(this.exp.equals(n))return this;if(this.exp instanceof Ci&&n instanceof Ci)return new mi(this.base,Ci.min(this.exp,n)).collect();if(this.exp instanceof Ci||n instanceof Ci)return Ci.One;var r=this.exp.asMul().partition(),s=n.asMul().partition();if(r[1].equals(s[1]))return new mi(t,new di(Ci.min(r[0].reduce(),s[0].reduce()),r[1].flatten()).flatten()).collect()}return Ci.One},isPositive:function(){if(this.base.isPositive())return!0;var e=this.exp.simplify();return e instanceof ki&&e.eval()%2==0},asPositiveFactor:function(){if(this.isPositive())return this;var e=this.exp.simplify();if(e instanceof ki){var t=e.eval();if(t>2)return new mi(this.base,new ki(t-1));if(t<-2)return new mi(this.base,new ki(t+1))}return Ci.One}}),f.default.extend(mi,{sqrt:function(e){return new mi(e,Ci.Sqrt)},nthroot:function(e,t){return new mi(e,di.fold(di.handleDivide(new ki(1),t)).addHint("root"))}}),fi.prototype=new pi,f.default.extend(fi.prototype,{func:fi,args:function(){return[this.base,this.power]},eval:function(e,t){return Math.log(this.power.eval(e,t))/Math.log(this.base.eval(e,t))},codegen:function(){return"(Math.log("+this.power.codegen()+") / Math.log("+this.base.codegen()+"))"},print:function(){var e="("+this.power.print()+")";return this.isNatural()?"ln"+e:"log_("+this.base.print()+") "+e},tex:function(){var e="("+this.power.tex()+")";return this.isNatural()?"\\ln"+e:"\\log_{"+this.base.tex()+"}"+e},collect:function(e){var t=this.recurse("collect",e);return t.power instanceof Ci&&1===t.power.eval()?Ci.Zero:t.base.equals(t.power)?Ci.One:t.power instanceof mi&&t.power.base.equals(t.base)?t.power.exp:t},expand:function(){var e=this.recurse("expand");return e.power instanceof di?new ui(f.default.map(e.power.terms,(function(t){return new fi(e.base,t).expand()}))):e.power instanceof mi?new di(e.power.exp,new fi(e.base,e.power.base).expand()).flatten():e.isNatural()?e:di.handleDivide(new fi(xi.e,e.power),new fi(xi.e,e.base))},hints:f.default.extend(fi.prototype.hints,{open:!1}),isPositive:function(){var e=this.collect();return e.base instanceof Ci&&e.power instanceof Ci&&this.eval()>0},needsExplicitMul:function(){return!1},isNatural:function(){return this.base.equals(xi.e)}}),f.default.extend(fi,{natural:function(){return xi.e},common:function(){return Ci.Ten},create:function(e,t){var n=new fi(e,t);return t.hints.parens||(n=n.addHint("open")),n}}),gi.prototype=new pi,f.default.extend(gi.prototype,{func:gi,args:function(){return[this.type,this.arg]},functions:{sin:{eval:Math.sin,codegen:"Math.sin((",tex:"\\sin",expand:function(){return this}},cos:{eval:Math.cos,codegen:"Math.cos((",tex:"\\cos",expand:function(){return this}},tan:{eval:Math.tan,codegen:"Math.tan((",tex:"\\tan",expand:function(){return di.handleDivide(gi.sin(this.arg),gi.cos(this.arg))}},csc:{eval:function(e){return 1/Math.sin(e)},codegen:"(1/Math.sin(",tex:"\\csc",expand:function(){return di.handleDivide(Ci.One,gi.sin(this.arg))}},sec:{eval:function(e){return 1/Math.cos(e)},codegen:"(1/Math.cos(",tex:"\\sec",expand:function(){return di.handleDivide(Ci.One,gi.cos(this.arg))}},cot:{eval:function(e){return 1/Math.tan(e)},codegen:"(1/Math.tan(",tex:"\\cot",expand:function(){return di.handleDivide(gi.cos(this.arg),gi.sin(this.arg))}},arcsin:{eval:Math.asin,codegen:"Math.asin((",tex:"\\arcsin"},arccos:{eval:Math.acos,codegen:"Math.acos((",tex:"\\arccos"},arctan:{eval:Math.atan,codegen:"Math.atan((",tex:"\\arctan"},arccsc:{eval:function(e){return Math.asin(1/e)},codegen:"Math.asin(1/(",tex:"\\operatorname{arccsc}"},arcsec:{eval:function(e){return Math.acos(1/e)},codegen:"Math.acos(1/(",tex:"\\operatorname{arcsec}"},arccot:{eval:function(e){return Math.atan(1/e)},codegen:"Math.atan(1/(",tex:"\\operatorname{arccot}"},sinh:{eval:function(e){return(Math.exp(e)-Math.exp(-e))/2},codegen:function(e){return"((Math.exp("+e+") - Math.exp(-("+e+"))) / 2)"},tex:"\\sinh",expand:function(){return this}},cosh:{eval:function(e){return(Math.exp(e)+Math.exp(-e))/2},codegen:function(e){return"((Math.exp("+e+") + Math.exp(-("+e+"))) / 2)"},tex:"\\cosh",expand:function(){return this}},tanh:{eval:function(e){return(Math.exp(e)-Math.exp(-e))/(Math.exp(e)+Math.exp(-e))},codegen:function(e){return"((Math.exp("+e+") - Math.exp(-("+e+"))) / (Math.exp("+e+") + Math.exp(-("+e+"))))"},tex:"\\tanh",expand:function(){return di.handleDivide(gi.sinh(this.arg),gi.cosh(this.arg))}},csch:{eval:function(e){return 2/(Math.exp(e)-Math.exp(-e))},codegen:function(e){return"(2 / (Math.exp("+e+") - Math.exp(-("+e+"))))"},tex:"\\csch",expand:function(){return di.handleDivide(Ci.One,gi.sinh(this.arg))}},sech:{eval:function(e){return 2/(Math.exp(e)+Math.exp(-e))},codegen:function(e){return"(2 / (Math.exp("+e+") + Math.exp(-("+e+"))))"},tex:"\\sech",expand:function(){return di.handleDivide(Ci.One,gi.cosh(this.arg))}},coth:{eval:function(e){return(Math.exp(e)+Math.exp(-e))/(Math.exp(e)-Math.exp(-e))},codegen:function(e){return"((Math.exp("+e+") + Math.exp(-("+e+"))) / (Math.exp("+e+") - Math.exp(-("+e+"))))"},tex:"\\coth",expand:function(){return di.handleDivide(gi.cosh(this.arg),gi.sinh(this.arg))}}},isEven:function(){return f.default.contains(["cos","sec"],this.type)},isInverse:function(){return 0===this.type.indexOf("arc")},isBasic:function(){return f.default.contains(["sin","cos"],this.type)},eval:function(e,t){return(0,this.functions[this.type].eval)(this.arg.eval(e,t))},codegen:function(){var e=this.functions[this.type].codegen;if("function"==typeof e)return e(this.arg.codegen());if("string"==typeof e)return e+this.arg.codegen()+"))";throw new Error("codegen not implemented for "+this.type)},print:function(){return this.type+"("+this.arg.print()+")"},tex:function(e){var t=this.functions[this.type].tex,n="("+this.arg.tex()+")";return e&&e.split?[t,n]:t+n},hints:f.default.extend(gi.prototype.hints,{open:!1}),isPositive:function(){return this.collect().arg instanceof Ci&&this.eval()>0},completeParse:function(){if(this.exp){var e=new mi(this,this.exp);return this.exp=void 0,e}return this},needsExplicitMul:function(){return!1},expand:function(){var e=this.recurse("expand");if(e.isInverse())return e;var t=e.functions[e.type].expand;return f.default.bind(t,e)()},collect:function(e){var t,n=this.recurse("collect",e);return!n.isInverse()&&n.arg.isNegative()?(t=n.arg instanceof Ci?n.arg.abs():di.handleDivide(n.arg,Ci.Neg).collect(e),n.isEven()?new gi(n.type,t):new di(Ci.Neg,new gi(n.type,t))):n}}),f.default.extend(gi,{create:function(e,t){var n=e[0],r=e[1];r&&r.equals(Ci.Neg)&&(n="arc"+n,r=void 0);var s=new gi(n,t);return t.hints.parens||(s=s.addHint("open")),r&&(s.exp=r),s},sin:function(e){return new gi("sin",e)},cos:function(e){return new gi("cos",e)},sinh:function(e){return new gi("sinh",e)},cosh:function(e){return new gi("cosh",e)}}),vi.prototype=new pi,f.default.extend(vi.prototype,{func:vi,args:function(){return[this.arg]},eval:function(e,t){return Math.abs(this.arg.eval(e,t))},codegen:function(){return"Math.abs("+this.arg.codegen()+")"},print:function(){return"abs("+this.arg.print()+")"},tex:function(){return"\\left|"+this.arg.tex()+"\\right|"},collect:function(e){var t=this.recurse("collect",e);if(t.arg.isPositive())return t.arg;if(t.arg instanceof Ci)return t.arg.abs();if(t.arg instanceof di){var n=f.default.groupBy(t.arg.terms,(function(e){return e.isPositive()?"positive":e instanceof Ci?"number":"other"})),r=n.positive.concat(f.default.invoke(n.number,"abs"));return n.other.length&&r.push(new vi(new di(n.other).flatten())),new di(r).flatten()}return t},expand:function(){var e=this.recurse("expand");return e.arg instanceof di?new di(f.default.map(e.arg.terms,(function(e){return new vi(e)}))):e},isPositive:function(){return!0}}),yi.prototype=new pi,f.default.extend(yi.prototype,{func:yi,args:function(){return[this.left,this.type,this.right]},needsExplicitMul:function(){return!1},print:function(){return this.left.print()+this.type+this.right.print()},signs:{"=":" = ","<":" < ",">":" > ","<>":" \\ne ","<=":" \\le ",">=":" \\ge "},tex:function(){return this.left.tex()+this.signs[this.type]+this.right.tex()},normalize:function(){var e=this.recurse("normalize");return f.default.contains([">",">="],e.type)?new yi(e.right,e.type.replace(">","<"),e.left):e},asExpr:function(e){var t=function(e){return e instanceof Ci&&e.isSimple()&&0===e.eval()},n=[];this.left instanceof ui?n=f.default.clone(this.left.terms):t(this.left)||(n=[this.left]),this.right instanceof ui?n=n.concat(this.right.negate().terms):t(this.right)||n.push(this.right.negate());var r=!this.isEquality();n=f.default.invoke(n,"collect",{preciseFloats:!0});for(var s=0;s<n.length;s++){var a=n[s].getDenominator();r&&!a.isPositive()&&(a=a.asPositiveFactor()),a.equals(Ci.One)||(n=f.default.map(n,(function(e){return di.createOrAppend(e,a).simplify({once:!0,preciseFloats:!0})})))}var i=new ui(n).flatten();return e?i:this.divideThrough(i)},divideThrough:function(e){var t=!this.isEquality(),n=e.simplify({once:!0}),r=n.factor({keepNegative:t});if(!(r instanceof di))return e;var s=r.terms,a=f.default.groupBy(s,(function(e){return e instanceof ui})),i=a[!0]||[],o=a[!1]||[];if(i.length&&this.isEquality())return new di(i).flatten();var l=o;i.length||(l=f.default.reject(l,(function(e){return!!e.getVars().length}))),t&&(l=f.default.invoke(l,"asPositiveFactor")),l=f.default.reject(l,(function(e){return e.equals(Ci.One)})),l=f.default.map(l,(function(e){return new mi(e,Ci.Div)}));var c=new di(s.concat(l)).collect();return c.equals(r)?n:c},isEquality:function(){return f.default.contains(["=","<>"],this.type)},compare:function(e){if(!(e instanceof yi))return!1;var t=this.normalize(),n=e.normalize();if(t.type!==n.type)return!1;var r=t.divideThrough(t.asExpr(!0).collect()),s=n.divideThrough(n.asExpr(!0).collect());return t.isEquality()?r.compare(s)||r.compare(di.handleNegative(s)):r.compare(s)},sameForm:function(e){var t=this.normalize(),n=e.normalize(),r=t.left.sameForm(n.left)&&t.right.sameForm(n.right);return t.isEquality()?r||t.left.sameForm(n.right)&&t.right.sameForm(n.left):r},isSimplified:function(){var e=this.asExpr(!0),t=this.divideThrough(e).simplify();return e.equals(t)&&this.left.isSimplified()&&this.right.isSimplified()}}),f.default.extend(yi.prototype,{solveLinearEquationForVariable:function(e){var t,n,r,s=this.asExpr();if(!s.is(ui)||2!==s.terms.length)throw new Error("Can only handle linear equations of the form a + bx (= 0)");return(r=s.terms[0]).has(wi)&&f.default.contains(r.getVars(),e.symbol)?(t=di.handleNegative(s.terms[1]),n=di.handleDivide(s.terms[0],e)):(t=di.handleNegative(s.terms[0]),n=di.handleDivide(s.terms[1],e)),di.handleDivide(t,n).simplify()}}),bi.prototype=new pi,f.default.extend(bi.prototype,{needsExplicitMul:function(){return!1},findGCD:function(e){return e instanceof bi||e instanceof Ci?this.equals(e)?this:Ci.One:e.findGCD(this)}}),Ei.prototype=new bi,f.default.extend(Ei.prototype,{func:Ei,args:function(){return[this.symbol,this.arg]},print:function(){return this.symbol+"("+this.arg.print()+")"},tex:function(){return this.symbol+"("+this.arg.tex()+")"},eval:function(e,t){var n=this.arg,r=e[this.symbol],s=f.default.extend(f.default.clone(e),{x:n.eval(e,t)}),a=Ti(r,t);return a.parsed?a.expr.eval(s,t):a},codegen:function(){return'vars["'+this.symbol+'"]('+this.arg.codegen()+")"},getUnits:function(){return this.arg.getUnits()},getVars:function(e){return e?this.arg.getVars():f.default.union(this.arg.getVars(),[this.symbol]).sort()},getConsts:function(){return this.arg.getConsts()}}),wi.prototype=new bi,f.default.extend(wi.prototype,{func:wi,args:function(){return[this.symbol,this.subscript]},exprArgs:function(){return[]},recurse:function(){return this},print:function(){var e="";return this.subscript&&(e="_("+this.subscript.print()+")"),this.symbol+e},prettyPrint:function(){var e=this.subscript;return e&&(e instanceof Ci||e instanceof bi)?this.symbol+"_"+e.print():this.print()},tex:function(){var e="";return this.subscript&&(e="_{"+this.subscript.tex()+"}"),(this.symbol.length>1?"\\":"")+this.symbol+e},repr:function(){return"Var("+this.print()+")"},eval:function(e,t){return e[this.prettyPrint()]},codegen:function(){return'vars["'+this.prettyPrint()+'"]'},getVars:function(){return[this.prettyPrint()]},isPositive:function(){return!1}}),xi.prototype=new bi,f.default.extend(xi.prototype,{func:xi,args:function(){return[this.symbol]},recurse:function(){return this},eval:function(e,t){return"pi"===this.symbol?Math.PI:"e"===this.symbol?Math.E:void 0},codegen:function(){return"pi"===this.symbol?"Math.PI":"e"===this.symbol?"Math.E":void 0},print:function(){return this.symbol},tex:function(){return"pi"===this.symbol?"\\pi ":"e"===this.symbol?"e":void 0},isPositive:function(){return this.eval()>0},abs:function(){return this.eval()>0?this:di.handleNegative(this)},getConsts:function(){return[this.print()]}}),xi.e=new xi("e"),xi.pi=new xi("pi"),Ci.prototype=new pi,f.default.extend(Ci.prototype,{repr:function(){return this.print()},strip:function(){return this.abs()},recurse:function(){return this},codegen:function(){return this.print()},add:oi,mul:oi,negate:oi,isSubtract:function(){return this.hints.subtract},abs:oi,needsExplicitMul:function(){return!0},findGCD:oi,isPositive:function(){return this.eval()>0},isNegative:function(){return this.eval()<0},asPositiveFactor:function(){return this.isPositive()?this:this.abs()},hints:f.default.extend(Ci.prototype.hints,{negate:!1,subtract:!1,divide:!1,root:!1,fraction:!1,entered:!1}),isSimple:oi,getDecimalPlaces:function(){var e=(""+this.n).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);return e?Math.max(0,(e[1]?e[1].length:0)-(e[2]?+e[2]:0)):0},asRational:oi}),Si.prototype=new Ci,f.default.extend(Si.prototype,{func:Si,args:function(){return[this.n,this.d]},eval:function(){return this.n/this.d},print:function(){return this.n.toString()+"/"+this.d.toString()},tex:function(){var e="\\frac{"+Math.abs(this.n).toString()+"}{"+this.d.toString()+"}";return this.n<0?"-"+e:e},add:function(e,t){return e instanceof Si?new Si(this.n*e.d+this.d*e.n,this.d*e.d).collect():e.add(this,t)},mul:function(e,t){return e instanceof Si?new Si(this.n*e.n,this.d*e.d).collect():e.mul(this,t)},collect:function(){var e=Ci.findGCD(this.n,this.d),t=this.n/e,n=this.d/e;return 1===n?new ki(t):new Si(t,n)},negate:function(){return new Si(-this.n,this.d)},abs:function(){return new Si(Math.abs(this.n),this.d)},findGCD:function(e){return e instanceof Si?new Si(Ci.findGCD(this.n*e.d,e.n*this.d),this.d*e.d).collect():e instanceof ki?new Si(Ci.findGCD(this.n,e.n),this.d):e.findGCD(this)},raiseToThe:function(e){if(e instanceof ki){var t=e.eval()>0,n=e.abs().eval(),r=Math.pow(this.n,n),s=Math.pow(this.d,n);return t?new Si(r,s).collect():new Si(s,r).collect()}return new Ni(this.eval()).raiseToThe(e)},getDenominator:function(){return new ki(this.d)},isSimple:function(){return!1},asRational:function(){return this}}),ki.prototype=new Si(0,1),f.default.extend(ki.prototype,{func:ki,args:function(){return[this.n]},print:function(){return this.n.toString()},tex:function(){return this.n.toString()},negate:function(){return new ki(-this.n)},abs:function(){return new ki(Math.abs(this.n))},isSimple:function(){return!0},findGCD:function(e){return e instanceof ki?new ki(Ci.findGCD(this.n,e.n)):e.findGCD(this)}}),f.default.extend(ki,{create:function(e){return new ki(e).addHint("entered")}}),Ni.prototype=new Ci,f.default.extend(Ni.prototype,{func:Ni,args:function(){return[this.n]},eval:function(){return this.n},print:function(){return this.n.toString()},tex:function(){return this.n.toString()},add:function(e,t){return t&&t.preciseFloats?Ni.toDecimalPlaces(this.n+e.eval(),Math.max(this.getDecimalPlaces(),e.getDecimalPlaces())):new Ni(this.n+e.eval()).collect()},mul:function(e,t){return t&&t.preciseFloats?Ni.toDecimalPlaces(this.n*e.eval(),this.getDecimalPlaces()+e.getDecimalPlaces()):new Ni(this.n*e.eval()).collect()},collect:function(){return this},negate:function(){return new Ni(-this.n)},abs:function(){return new Ni(Math.abs(this.n))},findGCD:function(e){return e instanceof Ci?new Ni(Ci.findGCD(this.eval(),e.eval())).collect():e.findGCD(this)},raiseToThe:function(e,t){return t&&t.preciseFloats&&e instanceof ki&&e.n>1?Ni.toDecimalPlaces(new mi(this,e).eval(),this.getDecimalPlaces()*e.n):new Ni(new mi(this,e).eval()).collect()},asRational:function(){var e=this.n.toString().split(".");return 1===e.length?new Si(this.n,1):new Si(Number(e.join("")),Math.pow(10,e[1].length)).collect()},getDenominator:function(){return this.asRational().getDenominator()},isSimple:function(){return!0}}),f.default.extend(Ni,{create:function(e){return new Ni(e).addHint("entered")},toDecimalPlaces:function(e,t){return new Ni(+e.toFixed(Math.min(t,20))).collect()}}),f.default.extend(Ci,{negativeOne:function(e){return"subtract"===e?Ci.Sub:"divide"===e?Ci.Div:Ci.Neg},findGCD:function(e,t){var n;if(e=Math.abs(e),t=Math.abs(t),e!==Math.floor(e)||t!==Math.floor(t))return 1;for(;t;)n=e%t,e=t,t=n;return e},min:function(){return f.default.min(f.default.toArray(arguments),(function(e){return e.eval()}))},max:function(){return f.default.max(f.default.toArray(arguments),(function(e){return e.eval()}))}}),Ci.Neg=new ki(-1).addHint("negate"),Ci.Sub=new ki(-1).addHint("subtract"),Ci.Div=new ki(-1).addHint("divide"),Ci.Sqrt=new Si(1,2).addHint("root"),Ci.Zero=new ki(0),Ci.One=new ki(1),Ci.Ten=new ki(10),ui.prototype.identity=Ci.Zero,di.prototype.identity=Ci.One,ii.yy={Add:ui,Mul:di,Pow:mi,Log:fi,Trig:gi,Eq:yi,Abs:vi,Func:Ei,Const:xi,Var:wi,Int:ki,Float:Ni,parseError:function(e,t){throw new Error(t.loc.first_column)},constants:["e"],symbolLexer:function(e){return f.default.contains(ii.yy.constants,e)?"CONST":f.default.contains(ii.yy.functions,e)?"FUNC":"VAR"}};var Ti=function(e,t){try{return t&&t.functions?ii.yy.functions=f.default.without(t.functions,"i"):ii.yy.functions=[],t&&t.decimal_separator&&(e=e.split(t.decimal_separator).join(".")),{parsed:!0,expr:ii.parse(e).completeParse()}}catch(e){return{parsed:!1,error:e.message}}};function _i(e){this.symbol=e}_i.prototype=new bi;var Oi=function(e){if(f.default(Ai).has(e)||f.default(zi).has(e))return new _i(e);var t=f.default(f.default(Pi).keys()).find((function(t){return new RegExp("^"+t).test(e)}));if(t){var n=e.replace(new RegExp("^"+t),"");if(f.default(Ai).has(n)||zi[n]&&zi[n].prefixes===Di)return new di(Pi[t],new _i(n));throw new Error(n+" does not allow prefixes")}return new _i(e)},Mi=function(e){try{var t=ai.parse(e),n=[];f.default(t.unit.num).each((function(e){n.push(new mi(Oi(e.name),new ki(e.pow)))})),f.default(t.unit.denom).each((function(e){n.push(new mi(Oi(e.name),new ki(-1*e.pow)))}));var r=new di(n).flatten();return"unitMagnitude"===t.type?{parsed:!0,unit:r,expr:new di([new Ni(+t.magnitude)].concat(n)),coefficient:t.magnitude,type:t.type}:{parsed:!0,unit:r,type:t.type}}catch(e){return{parsed:!1,error:e.message}}};f.default.extend(_i.prototype,{func:_i,args:function(){return[this.symbol]},recurse:function(){return this},eval:function(e,t){return 1},getUnits:function(){return[{unit:this.symbol,pow:1}]},codegen:function(){return"1"},print:function(){return this.symbol},tex:function(){return this.symbol},collect:function(e){if(f.default(Ai).has(this.symbol))return this;if(f.default(zi).has(this.symbol))return zi[this.symbol].conversion;throw new Error("could not understand unit: "+this.symbol)}});var Ai={m:new _i("m"),g:new _i("g"),s:new _i("s"),A:new _i("A"),K:new _i("K"),mol:new _i("mol"),cd:new _i("cd")},Pi={a:new mi(new ki(10),new ki(-18)),f:new mi(new ki(10),new ki(-15)),p:new mi(new ki(10),new ki(-12)),n:new mi(new ki(10),new ki(-9)),u:new mi(new ki(10),new ki(-6)),m:new mi(new ki(10),new ki(-3)),c:new mi(new ki(10),new ki(-2)),d:new mi(new ki(10),new ki(-1)),da:new ki(10),h:new mi(new ki(10),new ki(2)),k:new mi(new ki(10),new ki(3)),M:new mi(new ki(10),new ki(6)),G:new mi(new ki(10),new ki(9)),T:new mi(new ki(10),new ki(12)),P:new mi(new ki(10),new ki(15)),E:new mi(new ki(10),new ki(18)),hella:new mi(new ki(10),new ki(27))},Di={},Ii={},Ri=function(e,t){var n=e.split("|"),r=n[0].trim(),s=n[1].trim(),a=Ci.One;""!==r&&(a=Ti(r).expr);var i=s.split("/"),o=[a];return i[0]&&i[0].split(" ").filter((function(e){return""!==e})).map((function(e){o.push(new _i(e))})),i[1]&&i[1].split(" ").filter((function(e){return""!==e})).map((function(e){o.push(new mi(new _i(e),Ci.Div))})),{conversion:new di(o),prefixes:t}},zi={Da:Ri("1.6605388628 x 10^-24 | g",Di),u:Ri("| Da",Ii),meter:Ri("| m",Ii),meters:Ri("| m",Ii),in:Ri("254 / 10000 | m",Ii),ft:Ri("3048 / 10000 | m",Ii),yd:Ri("9144 / 10000 | m",Ii),mi:Ri("1609344 / 1000 | m",Ii),ly:Ri("9.4607 x 10^15 | m",Ii),nmi:Ri("1852 | m",Ii),"Å":Ri("10^-10 | m",Ii),pc:Ri("3.0857 x 10^16 | m",Ii),min:Ri("60 | s",Ii),hr:Ri("3600 | s",Ii),sec:Ri("| s",Ii),day:Ri("86400 | s",Ii),wk:Ri("604800 | s",Ii),fortnight:Ri("14 | day",Ii),shake:Ri("10^-8 | s",Ii),olympiad:Ri("126200000 | s",Ii),"°C":Ri("1 | K",Ii),"°F":Ri("5/9 | K",Ii),"°R":Ri("5/9 | K",Ii),e:Ri("1.6021765314 x 10^-19 | C",Ii),c:Ri("299792458 | m / s",Ii),kn:Ri("514/1000 | m / s",Ii),kt:Ri("| kn",Ii),knot:Ri("| kn",Ii),J:Ri("| N m",Di),BTU:Ri("1060 | J",Ii),cal:Ri("4184 / 1000 | J",Di),eV:Ri("1.602176514 x 10^-19 | J",Di),erg:Ri("10^−7 | J",Di),W:Ri("| J / s",Di),"H-e":Ri("80 | W",Ii),N:Ri("1000 | g m / s s",Di),lb:Ri("4448221615 / 1000000000 | N",Ii),dyn:Ri("10^-5 | N",Ii),Pa:Ri("1 | N / m m m",Di),bar:Ri("10^5 | Pa",Di),"㏔":Ri("1/1000 | bar",Ii),"㍴":Ri("| bar",Ii),atm:Ri("101325 | Pa",Ii),Torr:Ri("1/760 | atm",Ii),mmHg:Ri("| Torr",Ii),ha:Ri("10^4 | m m",Ii),b:Ri("10^−28 | m m",Di),barn:Ri("| b",Di),acre:Ri("4046.87 | m m",Ii),skilodge:Ri("10^-31 | m m",Ii),outhouse:Ri("10^-34 | m m",Ii),shed:Ri("10^-52 | m m",Ii),L:Ri("1/1000 | m m m",Di),gal:Ri("3785/1000 | L",Di),cup:Ri("1/16 | gal",Ii),qt:Ri("1/4 | gal",Ii),quart:Ri("| qt",Ii),p:Ri("1/8 | gal",Ii),pt:Ri("| p",Ii),pint:Ri("| p",Ii),"fl oz":Ri("1/8 | cup",Ii),"fl. oz.":Ri("1/8 | cup",Ii),tbsp:Ri("1/16 | cup",Ii),tsp:Ri("1/3 | tbsp",Ii),rev:Ri("2 pi | rad",Ii),deg:Ri("180 pi | rad",Ii),"°":Ri("| deg",Ii),arcminute:Ri("1/60 | deg",Ii),arcsec:Ri("1/3600 | deg",Ii),Hu:Ri("1000 | dB",Di),dozen:Ri("12 |",Ii),mol:Ri("6.0221412927 x 10^23 |",Di),"%":Ri("1/100 |",Ii),percent:Ri("| %",Ii),ppm:Ri("1/1000000 |",Ii),V:Ri("1000 | g m m / s s C",Di),C:Ri("| A s",Di),ampere:Ri("| A",Ii),"Ω":Ri("| V / A",Di),ohm:Ri("| Ω",Ii),F:Ri("| C / V",Di),H:Ri("| ohm s",Di),T:Ri("1000 | g / C s",Di),Wb:Ri("1000 | g m m / C s",Di),lm:Ri("pi x 10^4 | cd / m m",Ii),lx:Ri("| lm / m m",Ii),nit:Ri("| cd / m m",Ii),sb:Ri("10^4 | cd / m m",Ii),stilb:Ri("1 | sb",Ii),apostilb:Ri("1 / pi x 10^(-4) | sb",Ii),blondel:Ri("| apostilb",Ii),asb:Ri("| apostilb",Ii),la:Ri("| lm",Ii),Lb:Ri("| lm",Ii),sk:Ri("10^-7 | lm",Ii),skot:Ri("| sk",Ii),bril:Ri("10^-11 | lm",Ii),Hz:Ri("| / s",Di)};const Li=g.default,Fi=v.default({displayName:"SortableArea",propTypes:{className:Li.string,components:Li.arrayOf(Li.node).isRequired,onReorder:Li.func.isRequired,style:Li.any,verify:Li.func},getDefaultProps:function(){return{verify:()=>!0}},getInitialState:function(){return{dragging:null,components:this.props.components}},componentDidMount:function(){this._setDragEvents()},UNSAFE_componentWillReceiveProps:function(e){this.setState({components:e.components})},componentDidUpdate:function(){this._setDragEvents()},onDragStart:function(e){this.setState({dragging:e})},onDrop:function(){this.setState({dragging:null}),this.props.onReorder(this.state.components)},onDragEnter:function(e){if(this.state.dragging===e)return;const t=this.state.components.slice(),n=t.splice(this.state.dragging,1);t.splice(e,0,n[0]);const r=this.props.verify(t);return r&&this.setState({dragging:e,components:t}),r},_listenEvent:function(e){e.dataTransfer.setData("hackhackhack","because browsers!")},_cancelEvent:function(e){e.preventDefault()},_setDragEvents:function(){this._dragItems=this._dragItems||[];const e=E.default.findDOMNode(this).querySelectorAll("[draggable=true]"),t=[],n=[];for(let n=0;n<this._dragItems.length;n++){const r=this._dragItems[n];e.indexOf(r)<0&&t.push(r)}for(let t=0;t<e.length;t++){const r=e[t];this._dragItems.indexOf(r)<0&&n.push(r)}for(let e=0;e<n.length;e++){const t=n[e];t.addEventListener("dragstart",this._listenEvent),t.addEventListener("drop",this._cancelEvent)}for(let e=0;e<t.length;e++){const n=t[e];n.removeEventListener("dragstart",this._listenEvent),n.removeEventListener("drop",this._cancelEvent)}},render:function(){const e=this.state.components.map(((e,t)=>d.createElement(Ui,{index:t,component:e,area:this,key:e.key,draggable:e.props.draggable,dragging:t===this.state.dragging})));return d.createElement("ol",{className:this.props.className,style:this.props.style},e)}}),Ui=v.default({displayName:"SortableItem",propTypes:{area:Li.shape({onDragEnter:Li.func.isRequired,onDragStart:Li.func.isRequired,onDrop:Li.func.isRequired}),component:Li.node.isRequired,dragging:Li.bool.isRequired,draggable:Li.bool.isRequired,index:Li.number.isRequired},handleDragStart:function(e){e.nativeEvent.dataTransfer.effectAllowed="move",this.props.area.onDragStart(this.props.index)},handleDrop:function(){this.props.area.onDrop(this.props.index)},handleDragEnter:function(e){const t=this.props.area.onDragEnter(this.props.index);e.nativeEvent.dataTransfer.effectAllowed=t?"move":"none"},handleDragOver:function(e){e.preventDefault()},render:function(){let e="sortable-disabled";return this.props.dragging?e="sortable-dragging":this.props.draggable&&(e="sortable-enabled"),d.createElement("li",{draggable:this.props.draggable,className:e,onDragStart:this.handleDragStart,onDrop:this.handleDrop,onDragEnter:this.handleDragEnter,onDragOver:this.handleDragOver},this.props.component)}}),{InfoTip:qi,PropCheckBox:Wi,TexButtons:Vi}=e.components,{getDependencies:ji}=e.Dependencies,Bi=["correct","wrong","ungraded"],$i=g.default.shape({considered:g.default.oneOf(Bi).isRequired,value:g.default.string.isRequired,form:g.default.bool.isRequired,simplify:g.default.bool.isRequired}),Hi=e=>{const t=[];e.forEach((e=>{t[e.key]=!0}));for(let e=0;e<t.length;e++)if(!t[e])return e;return t.length};class Gi extends d.Component{constructor(t){var n;let r;super(t),n=this,C(this,"change",(function(){for(var t=arguments.length,r=new Array(t),s=0;s<t;s++)r[s]=arguments[s];return e.Changeable.change.apply(n,r)})),C(this,"serialize",(()=>{const e=["value","form","simplify","considered","key"],t=["answerForms","buttonSets","functions","times"],n=this.props.answerForms.map((t=>f.default(t).pick(e)));return ss(this.props).set(["answerForms"],n).mod([],(e=>f.default(e).pick(t))).freeze()})),C(this,"getSaveWarnings",(()=>{const e=[];if(0===this.props.answerForms.length)e.push("No answers specified");else{!!f.default(this.props.answerForms).find((e=>"correct"===e.considered))||e.push("No correct answer specified"),f.default(this.props.answerForms).each(((t,n)=>{if(""===this.props.value)e.push("Answer ".concat(n+1," is empty"));else{const n=Ti(t.value,{functions:this.props.functions});n.parsed?t.simplify&&!n.expr.isSimplified()&&e.push("".concat(t.value,' isn\'t simplified, but is required" +\n " to be')):e.push("Couldn't parse ".concat(t.value))}}))}return e})),C(this,"_newEmptyAnswerForm",(()=>({considered:"correct",form:!1,key:Hi(this.props.answerForms),simplify:!1,value:""}))),C(this,"newAnswer",(()=>{const e=this.props.answerForms.slice();e.push(this._newEmptyAnswerForm()),this.change({answerForms:e})})),C(this,"handleRemoveForm",(e=>{const t=this.props.answerForms.slice();t.splice(e,1),this.change({answerForms:t})})),C(this,"updateForm",((e,t)=>{const n=ss(this.props.answerForms).merge([e],t).freeze();this.change({answerForms:n})})),C(this,"handleReorder",(e=>{const t=f.default(e).map((e=>{const t=f.default(e.props).pick("considered","form","simplify","value");return t.key=e.key,t}));this.change({answerForms:t})})),C(this,"handleButtonSet",(e=>{const t=f.default(Vi.buttonSets).keys(),n=f.default(t).filter((t=>f.default(this.props.buttonSets).contains(t)!==(t===e)));this.props.onChange({buttonSets:n})})),C(this,"handleToggleDiv",(()=>{let e,t;f.default(this.props.buttonSets).contains("basic+div")?(e="basic",t="basic+div"):(e="basic+div",t="basic");const n=f.default(this.props.buttonSets).reject((e=>e===t)).concat(e);this.change("buttonSets",n)})),C(this,"handleTexInsert",(e=>{this.refs.expression.insert(e)})),C(this,"handleFunctions",(e=>{const t={};t.functions=f.default.compact(e.target.value.split(/[ ,]+/)),this.props.onChange(t)})),r=0===t.answerForms.length||f.default(t.answerForms).any((e=>{const{value:t}=e;return-1!==f.default.indexOf(t,"\\")||-1!==f.default.indexOf(t,"{")})),this.state={isTex:r}}render(){const e=this.props.answerForms.map(((e,t)=>{const n={times:this.props.times,functions:this.props.functions,buttonSets:this.props.buttonSets,buttonsVisible:"focused",form:e.form,simplify:e.simplify,value:e.value,onChange:e=>this.updateForm(t,e),trackInteraction:()=>{},widgetId:this.props.widgetId+"-"+t};return ss(e).merge([],{draggable:!0,onChange:e=>this.updateForm(t,e),onDelete:()=>this.handleRemoveForm(t),expressionProps:n}).freeze()})).map(((e,t)=>d.createElement(Yi,S({key:t},e)))),t=d.createElement(Fi,{components:e,onReorder:this.handleReorder,className:"answer-options-list"}),n=f.default(Vi.buttonSets).map(((e,t)=>{const n="basic"===t,r=f.default.contains(this.props.buttonSets,t)||n,s=n?"button-set-label-float":"button-set-label";return d.createElement("label",{className:s,key:t},d.createElement("input",{type:"checkbox",checked:r,disabled:n,onChange:()=>this.handleButtonSet(t)}),t)})),{TeX:r}=ji();return n.splice(1,1,d.createElement("label",{key:"show-div"},d.createElement("input",{type:"checkbox",onChange:this.handleToggleDiv}),d.createElement("span",{className:"show-div-button"},"show ",d.createElement(r,null,"\\div")," button"))),d.createElement("div",{className:"perseus-widget-expression-editor"},d.createElement("h3",{className:"expression-editor-h3"},"Global Options"),d.createElement("div",null,d.createElement(Wi,{times:this.props.times,onChange:this.props.onChange,labelAlignment:"right",label:"Use × for rendering multiplication instead of a center dot."}),d.createElement(qi,null,d.createElement("p",null,"For pre-algebra problems this option displays multiplication as \\times instead of \\cdot in both the rendered output and the acceptable formats examples."))),d.createElement("div",null,d.createElement("label",null,"Function variables: ",d.createElement("input",{type:"text",defaultValue:this.props.functions.join(" "),onChange:this.handleFunctions})),d.createElement(qi,null,d.createElement("p",null,'Single-letter variables listed here will be interpreted as functions. This let us know that f(x) means "f of x" and not "f times x".'))),d.createElement("div",null,d.createElement("div",null,"Button sets:"),n),this.state.isTex&&d.createElement(Vi,{className:"math-input-buttons",sets:this.props.buttonSets,convertDotToTimes:this.props.times,onInsert:this.handleTexInsert}),d.createElement("h3",{className:"expression-editor-h3"},"Answers"),d.createElement("p",{style:{margin:"4px 0"}},"student responses area matched against these from top to bottom"),t,d.createElement("div",null,d.createElement("button",{className:"simple-button orange",style:{fontSize:13},onClick:this.newAnswer,type:"button"},"Add new answer")))}}C(Gi,"propTypes",{...e.Changeable.propTypes,answerForms:g.default.arrayOf($i),times:g.default.bool,buttonSets:Vi.buttonSetsType,functions:g.default.arrayOf(g.default.string)}),C(Gi,"widgetName","expression"),C(Gi,"defaultProps",{answerForms:[],times:!1,buttonSets:["basic"],functions:["f","g","h"]});class Yi extends d.Component{constructor(){var t;super(...arguments),t=this,C(this,"state",{deleteFocused:!1}),C(this,"handleDeleteBlur",(()=>{this.setState({deleteFocused:!1})})),C(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),C(this,"handleImSure",(()=>{this.props.onDelete()})),C(this,"handleDelete",(()=>{this.setState({deleteFocused:!0})})),C(this,"toggleConsidered",(()=>{const e=function(e,t){let n=f.default(e).indexOf(t);return n=(n+1)%e.length,e[n]}(Bi,this.props.considered);this.change({considered:e})}))}render(){let t=null;return t=this.state.deleteFocused?d.createElement("button",{type:"button",className:"simple-button orange",onClick:this.handleImSure,onBlur:this.handleDeleteBlur},"I'm sure!"):d.createElement("button",{type:"button",className:"simple-button orange",onClick:this.handleDelete},"Delete"),d.createElement("div",{className:"expression-answer-option"},d.createElement("div",{className:"answer-handle"}),d.createElement("div",{className:"answer-body"},d.createElement("div",{className:"answer-considered"},d.createElement("div",{onClick:this.toggleConsidered,className:"answer-status "+this.props.considered},this.props.considered),d.createElement("div",{className:"answer-expression"},d.createElement(e.Expression,this.props.expressionProps))),d.createElement("div",{className:"answer-option"},d.createElement(Wi,{form:this.props.form,onChange:this.props.onChange,labelAlignment:"right",label:"Answer expression must have the same form."}),d.createElement(qi,null,d.createElement("p",null,"The student's answer must be in the same form. Commutativity and excess negative signs are ignored."))),d.createElement("div",{className:"answer-option"},d.createElement(Wi,{simplify:this.props.simplify,onChange:this.props.onChange,labelAlignment:"right",label:"Answer expression must be fully expanded and simplified."}),d.createElement(qi,null,d.createElement("p",null,'The student\'s answer must be fully expanded and simplified. Answering this equation (x^2+2x+1) with this factored equation (x+1)^2 will render this response "Your answer is not fully expanded and simplified."'))),d.createElement("div",{className:"remove-container"},t)))}}C(Yi,"propTypes",{...e.Changeable.propTypes,considered:g.default.oneOf(Bi).isRequired,expressionProps:g.default.object.isRequired,form:g.default.bool.isRequired,simplify:g.default.bool.isRequired,onChange:g.default.func.isRequired,onDelete:g.default.func.isRequired});const{InlineIcon:Ki,TextInput:Ji}=e.components,{iconPlus:Xi,iconTrash:Zi}=e.icons;class Qi extends d.Component{constructor(){var t;super(...arguments),t=this,C(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),C(this,"handleAddHint",(()=>{this.props.onChange({hint:{content:""}},(()=>{this.refs["hint-editor"].focus()}))})),C(this,"handleRemoveHint",(e=>{this.props.onChange({hint:null})})),C(this,"getSaveWarnings",(()=>this.refs.editor.getSaveWarnings())),C(this,"serialize",(()=>({title:this.props.title,...this.refs.editor.serialize(),hint:this.refs["hint-editor"]&&this.refs["hint-editor"].serialize()})))}render(){return d.createElement("div",{className:"perseus-group-editor"},d.createElement("div",{className:"perseus-widget-row"},d.createElement("label",{className:o.css(eo.title)},"Title:"," ",d.createElement(Ji,{value:this.props.title,className:o.css(eo.input),onChange:this.change("title")}))),d.createElement(Un,{ref:"editor",content:this.props.content,widgets:this.props.widgets,apiOptions:this.props.apiOptions,images:this.props.images,widgetEnabled:!0,immutableWidgets:!1,onChange:this.props.onChange,warnNoPrompt:!0,warnNoWidgets:!0}),!this.props.hint&&d.createElement("button",{type:"button",style:{marginTop:10},className:"add-hint simple-button orange",onClick:this.handleAddHint},d.createElement(Ki,Xi)," Add a hint"),this.props.hint&&d.createElement("div",{className:"perseus-hint-editor"},d.createElement("div",{className:o.css(eo.hintsTitle)},"Hint"),d.createElement(Un,{ref:"hint-editor",content:this.props.hint?this.props.hint.content:"",widgets:this.props.hint?this.props.hint.widgets:{},apiOptions:this.props.apiOptions,images:this.props.hint&&this.props.hint.images,widgetEnabled:!0,immutableWidgets:!1,onChange:e=>{this.change("hint",Object.assign({},this.props.hint,e))}}),d.createElement("button",{type:"button",className:"remove-hint simple-button orange",onClick:this.handleRemoveHint},d.createElement(Ki,Zi)," Remove this hint")))}}C(Qi,"propTypes",{...e.Changeable.propTypes,title:g.default.string,content:g.default.string,widgets:g.default.object,images:g.default.object,apiOptions:e.ApiOptions.propTypes}),C(Qi,"widgetName","graded-group"),C(Qi,"defaultProps",{title:"",content:"",widgets:{},images:{},hint:null});const eo=o.StyleSheet.create({title:{fontSize:18,fontWeight:"bold"},input:{fontSize:18},hintsTitle:{marginTop:10,fontSize:"110%",fontWeight:"bold"}});class to extends d.Component{constructor(){var t;super(...arguments),t=this,C(this,"_editors",void 0),C(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),C(this,"getSaveWarnings",(()=>[].concat(...this._editors.map((e=>e?e.getSaveWarnings():[]))))),C(this,"serialize",(()=>({gradedGroups:this.props.gradedGroups}))),C(this,"renderGroups",(()=>this.props.gradedGroups?this.props.gradedGroups.map(((e,t)=>d.createElement(Qi,S({key:t,ref:e=>this._editors[t]=e},e,{apiOptions:this.props.apiOptions,widgetEnabled:!0,immutableWidgets:!1,onChange:e=>this.change("gradedGroups",no(this.props.gradedGroups,t,{...this.props.gradedGroups[t],...e}))})))):null)),C(this,"addGroup",(()=>{const e=this.props.gradedGroups||[];this.change("gradedGroups",e.concat([Qi.defaultProps]))}))}UNSAFE_componentWillMount(){this._editors=[]}render(){return d.createElement("div",{className:"perseus-group-editor"},this.renderGroups(),d.createElement("button",{onClick:this.addGroup},"Add group"))}}C(to,"propTypes",{...e.Changeable.propTypes,apiOptions:e.ApiOptions.propTypes,gradedGroups:g.default.array,onChange:g.default.func.isRequired}),C(to,"widgetName","graded-group-set"),C(to,"defaultProps",{gradedGroups:[]});const no=(e,t,n)=>[...e.slice(0,t),n,...e.slice(t+1)],{ButtonGroup:ro,InfoTip:so,PropCheckBox:ao,RangeInput:io}=e.components,{getDependencies:oo}=e.Dependencies,lo={url:null,width:0,height:0};const co=v.default({displayName:"GraphSettings",propTypes:{...e.Changeable.propTypes,editableSettings:g.default.arrayOf(g.default.oneOf(["canvas","graph","snap","image","measure"])),box:g.default.arrayOf(g.default.number),labels:g.default.arrayOf(g.default.string),range:g.default.arrayOf(g.default.arrayOf(g.default.number)),step:g.default.arrayOf(g.default.number),gridStep:g.default.arrayOf(g.default.number),snapStep:g.default.arrayOf(g.default.number),valid:g.default.oneOfType([g.default.bool,g.default.string]),backgroundImage:g.default.object,markings:g.default.oneOf(["graph","grid","none"]),showProtractor:g.default.bool,showRuler:g.default.bool,showTooltips:g.default.bool,rulerLabel:g.default.string,rulerTicks:g.default.number},getDefaultProps:function(){return{editableSettings:["graph","snap","image","measure"],box:[e.interactiveSizes.defaultBoxSizeSmall,e.interactiveSizes.defaultBoxSizeSmall],labels:["x","y"],range:[[-10,10],[-10,10]],step:[1,1],gridStep:[1,1],snapStep:[1,1],valid:!0,backgroundImage:lo,markings:"graph",showProtractor:!1,showRuler:!1,showTooltips:!1,rulerLabel:"",rulerTicks:10}},getInitialState:function(){return this.stateFromProps(this.props)},componentDidMount:function(){this._isMounted=!0,this.changeGraph=f.default.debounce(this.changeGraph,300)},UNSAFE_componentWillReceiveProps:function(e){f.default.isEqual(this.props.labels,e.labels)&&f.default.isEqual(this.props.gridStep,e.gridStep)&&f.default.isEqual(this.props.snapStep,e.snapStep)&&f.default.isEqual(this.props.step,e.step)&&f.default.isEqual(this.props.range,e.range)&&f.default.isEqual(this.props.backgroundImage,e.backgroundImage)||this.setState(this.stateFromProps(e))},componentWillUnmount:function(){this._isMounted=!1},stateFromProps:function(e){return{labelsTextbox:e.labels,gridStepTextbox:e.gridStep,snapStepTextbox:e.snapStep,stepTextbox:e.step,rangeTextbox:e.range,backgroundImage:f.default.clone(e.backgroundImage)}},change(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return e.Changeable.change.apply(this,n)},changeRulerLabel:function(e){this.change({rulerLabel:e.target.value})},changeRulerTicks:function(e){this.change({rulerTicks:+e.target.value})},changeBackgroundUrl:function(t){if("keypress"===t.type&&"Enter"!==t.key)return;const n=(e,t,n)=>{const r=f.default.clone(this.props.backgroundImage);r.url=e,r.width=t,r.height=n,this.setState({backgroundImage:r},this.changeGraph)},r=E.default.findDOMNode(this.refs["bg-url"]).value;r?e.Util.getImageSize(r,((e,t)=>{this._isMounted&&n(r,e,t)})):n(null,0,0)},renderLabelChoices:function(e){return f.default.map(e,(function(e){return d.createElement("option",{value:e[1]},e[0])}))},validRange:function(e){return f.default.every(e,(function(e){return f.default.isFinite(e)}))?!(e[0]>=e[1])||"Range must have a higher number on the right":"Range must be a valid number"},validateStepValue:function(e){const{step:t,range:n,name:r,minTicks:s,maxTicks:a}=e;if(!f.default.isFinite(t))return r+" must be a valid number";const i=function(e,t){return Math.floor((e[1]-e[0])/t)}(n,t);return i<s?r+" is too large, there must be at least "+s+" ticks.":!(i>a)||r+" is too small, there can be at most "+a+" ticks."},validSnapStep:function(e,t){return this.validateStepValue({step:e,range:t,name:"Snap step",minTicks:5,maxTicks:60})},validGridStep:function(e,t){return this.validateStepValue({step:e,range:t,name:"Grid step",minTicks:3,maxTicks:60})},validStep:function(e,t){return this.validateStepValue({step:e,range:t,name:"Step",minTicks:3,maxTicks:20})},validBackgroundImageSize:function(e){if(!e.url)return!0;return!!(e.width<=450&&e.height<=450)||"Image must be smaller than 450px x 450px."},validateGraphSettings:function(e,t,n,r,s){const a=this;let i;const o=f.default.every(e,(function(e){return i=a.validRange(e),!0===i}));if(!o)return i;const l=f.default.every(t,(function(t,n){return i=a.validStep(t,e[n]),!0===i}));if(!l)return i;const c=f.default.every(n,(function(t,n){return i=a.validGridStep(t,e[n]),!0===i}));if(!c)return i;const p=f.default.every(r,(function(t,n){return i=a.validSnapStep(t,e[n]),!0===i}));if(!p)return i;const h=this.validBackgroundImageSize(s);return!0===h||(i=h,i)},changeLabel:function(e,t){const n=t.target.value,r=this.state.labelsTextbox.slice();r[e]=n,this.setState({labelsTextbox:r},this.changeGraph)},changeRange:function(t,n){const r=this.state.rangeTextbox.slice();r[t]=n;const s=this.state.stepTextbox.slice(),a=this.state.gridStepTextbox.slice(),i=this.state.snapStepTextbox.slice(),o=e.Util.scaleFromExtent(r[t],this.props.box[t]);!0===this.validRange(r[t])&&(s[t]=e.Util.tickStepFromExtent(r[t],this.props.box[t]),a[t]=e.Util.gridStepFromTickStep(s[t],o),i[t]=a[t]/2),this.setState({stepTextbox:s,gridStepTextbox:a,snapStepTextbox:i,rangeTextbox:r},this.changeGraph)},changeStep:function(e){this.setState({stepTextbox:e},this.changeGraph)},changeSnapStep:function(e){this.setState({snapStepTextbox:e},this.changeGraph)},changeGridStep:function(e){this.setState({gridStepTextbox:e,snapStepTextbox:f.default.map(e,(function(e){return e/2}))},this.changeGraph)},changeGraph:function(){const e=this.state.labelsTextbox,t=f.default.map(this.state.rangeTextbox,(function(e){return f.default.map(e,Number)})),n=f.default.map(this.state.stepTextbox,Number),r=this.state.gridStepTextbox,s=this.state.snapStepTextbox,a=this.state.backgroundImage,i=this.validateGraphSettings(t,n,r,s,a);!0===i?this.change({valid:!0,labels:e,range:t,step:n,gridStep:r,snapStep:s,backgroundImage:a}):this.change({valid:i})},render:function(){const t=[e.KhanMath.roundTo(2,e.Util.scaleFromExtent(this.props.range[0],this.props.box[0])),e.KhanMath.roundTo(2,e.Util.scaleFromExtent(this.props.range[1],this.props.box[1]))],{TeX:n}=oo();return d.createElement("div",null,f.default.contains(this.props.editableSettings,"canvas")&&d.createElement("div",{className:"graph-settings"},d.createElement("div",{className:"perseus-widget-row"},"Canvas size (x,y pixels)",d.createElement(io,{value:this.props.box,onChange:e=>{this.change({box:e})}})),d.createElement("div",{className:"perseus-widget-row"},"Scale (px per div):"," ",d.createElement(n,null,"("+t[0]+", "+t[1]+")"))),f.default.contains(this.props.editableSettings,"graph")&&d.createElement("div",{className:"graph-settings"},d.createElement("div",{className:"perseus-widget-row"},d.createElement("div",{className:"perseus-widget-left-col"}," ","x Label",d.createElement("input",{type:"text",className:"graph-settings-axis-label",ref:"labels-0",onChange:e=>this.changeLabel(0,e),value:this.state.labelsTextbox[0]||""})),d.createElement("div",{className:"perseus-widget-right-col"},"y Label",d.createElement("input",{type:"text",className:"graph-settings-axis-label",ref:"labels-1",onChange:e=>this.changeLabel(1,e),value:this.state.labelsTextbox[1]||""}))),d.createElement("div",{className:"perseus-widget-row"},d.createElement("div",{className:"perseus-widget-left-col"},"x Range",d.createElement(io,{value:this.state.rangeTextbox[0],onChange:e=>this.changeRange(0,e)})),d.createElement("div",{className:"perseus-widget-right-col"},"y Range",d.createElement(io,{value:this.state.rangeTextbox[1],onChange:e=>this.changeRange(1,e)}))),d.createElement("div",{className:"perseus-widget-row"},d.createElement("div",{className:"perseus-widget-left-col"},"Tick Step",d.createElement(io,{value:this.state.stepTextbox,onChange:this.changeStep})),d.createElement("div",{className:"perseus-widget-right-col"},"Grid Step",d.createElement(io,{value:this.state.gridStepTextbox,onChange:this.changeGridStep}))),f.default.contains(this.props.editableSettings,"snap")&&d.createElement("div",{className:"perseus-widget-row"},d.createElement("div",{className:"perseus-widget-left-col"},"Snap Step",d.createElement(io,{value:this.state.snapStepTextbox,onChange:this.changeSnapStep}))),d.createElement("div",{className:"perseus-widget-row"},d.createElement("label",null,"Markings: "),d.createElement(ro,{value:this.props.markings,allowEmpty:!1,buttons:[{value:"graph",content:"Graph"},{value:"grid",content:"Grid"},{value:"none",content:"None"}],onChange:this.change("markings")})),d.createElement("div",{className:"perseus-widget-left-col"},d.createElement(ao,{label:"Show tooltips",showTooltips:this.props.showTooltips,onChange:this.change}))),f.default.contains(this.props.editableSettings,"image")&&d.createElement("div",{className:"image-settings"},d.createElement("div",null,"Background image:"),d.createElement("div",null,"Url:"," ",d.createElement("input",{type:"text",className:"graph-settings-background-url",ref:"bg-url",value:this.state.backgroundImage.url||"",onChange:e=>{const t=f.default.clone(this.props.backgroundImage);t.url=e.target.value,this.setState({backgroundImage:t})},onKeyPress:this.changeBackgroundUrl,onBlur:this.changeBackgroundUrl}),d.createElement(so,null,d.createElement("p",null,'Create an image in graphie, or use the "Add image" function to create a background.')))),f.default.contains(this.props.editableSettings,"measure")&&d.createElement("div",{className:"misc-settings"},d.createElement("div",{className:"perseus-widget-row"},d.createElement("div",{className:"perseus-widget-left-col"},d.createElement(ao,{label:"Show ruler",showRuler:this.props.showRuler,onChange:this.change})),d.createElement("div",{className:"perseus-widget-right-col"},d.createElement(ao,{label:"Show protractor",showProtractor:this.props.showProtractor,onChange:this.change}))),this.props.showRuler&&d.createElement("div",null,d.createElement("div",null,d.createElement("label",null," ","Ruler label:"," ",d.createElement("select",{onChange:this.changeRulerLabel,value:this.props.rulerLabel},d.createElement("option",{value:""},"None"),d.createElement("optgroup",{label:"Metric"},this.renderLabelChoices([["milimeters","mm"],["centimeters","cm"],["meters","m"],["kilometers","km"]])),d.createElement("optgroup",{label:"Imperial"},this.renderLabelChoices([["inches","in"],["feet","ft"],["yards","yd"],["miles","mi"]]))))),d.createElement("div",null,d.createElement("label",null," ","Ruler ticks:"," ",d.createElement("select",{onChange:this.changeRulerTicks,value:this.props.rulerTicks},f.default.map([1,2,4,8,10,16],(function(e){return d.createElement("option",{value:e},e)}))))))))}}),{InfoTip:po,MultiButtonGroup:ho}=e.components,{containerSizeClass:uo,getInteractiveBoxFromSizeClass:mo}=e.SizingUtils,fo=e.GrapherWidget.widget,{DEFAULT_GRAPHER_PROPS:go,allTypes:vo,chooseType:yo,defaultPlotProps:bo,getEquationString:Eo,typeToButton:wo}=e.GrapherUtil;class xo extends d.Component{constructor(){var t;super(...arguments),t=this,C(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),C(this,"handleAvailableTypesChange",(e=>{let t=this.props.correct;if(!f.default.contains(e,this.props.correct.type)){const n=this.props.graph,r=yo(e);t=bo(r,n)}this.props.onChange({availableTypes:e,correct:t})})),C(this,"serialize",(()=>f.default.chain(this.props).pick("correct","availableTypes").extend({graph:f.default.omit(this.props.graph,"box")}).value()))}render(){const e=uo.SMALL;let t,n;if(!0===this.props.graph.valid){const r={graph:this.props.graph,plot:this.props.correct,availableTypes:this.props.availableTypes,onChange:(e,t)=>{var n;let r=this.props.correct;r=r.type===(null===(n=e.plot)||void 0===n?void 0:n.type)?f.default.extend({},r,e.plot):e.plot,this.props.onChange({correct:r},t)},trackInteraction:function(){}};n=d.createElement(fo,S({},r,{apiOptions:this.props.apiOptions,containerSizeClass:e})),t=Eo(r)}else n=d.createElement("div",{className:"perseus-error"},this.props.graph.valid);return d.createElement("div",null,d.createElement("div",null,"Correct answer"," ",d.createElement(po,null,d.createElement("p",null,"Graph the correct answer in the graph below and ensure the equation or point coordinates displayed represent the correct answer."))," ",": ",t),d.createElement(co,{editableSettings:["graph","snap","image"],box:mo(e),range:this.props.graph.range,labels:this.props.graph.labels,step:this.props.graph.step,gridStep:this.props.graph.gridStep,snapStep:this.props.graph.snapStep,valid:this.props.graph.valid,backgroundImage:this.props.graph.backgroundImage,markings:this.props.graph.markings,rulerLabel:this.props.graph.rulerLabel,rulerTicks:this.props.graph.rulerTicks,showTooltips:this.props.graph.showTooltips,onChange:this.change("graph")}),d.createElement("div",{className:"perseus-widget-row"},d.createElement("label",null,"Available functions: "),d.createElement(ho,{allowEmpty:!1,values:this.props.availableTypes,buttons:f.default.map(vo,wo),onChange:this.handleAvailableTypesChange})),n)}}C(xo,"propTypes",{...e.Changeable.propTypes}),C(xo,"widgetName","grapher"),C(xo,"defaultProps",{correct:go.plot,graph:go.graph,availableTypes:go.availableTypes});class Co extends d.Component{constructor(){var t;super(...arguments),t=this,C(this,"_renderMetadataEditor",(()=>{const e=this.props.apiOptions.GroupMetadataEditor;return d.createElement(e,{value:this.props.metadata,onChange:this.change("metadata")})})),C(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),C(this,"getSaveWarnings",(()=>this.refs.editor.getSaveWarnings())),C(this,"serialize",(()=>f.default.extend({},this.refs.editor.serialize(),{metadata:this.props.metadata})))}render(){return d.createElement("div",{className:"perseus-group-editor"},d.createElement("div",null,this._renderMetadataEditor()),d.createElement(Un,{ref:"editor",content:this.props.content,widgets:this.props.widgets,apiOptions:this.props.apiOptions,images:this.props.images,widgetEnabled:!0,immutableWidgets:!1,onChange:this.props.onChange}))}}C(Co,"propTypes",{...e.Changeable.propTypes,content:g.default.string,widgets:g.default.object,images:g.default.object,metadata:g.default.any,apiOptions:e.ApiOptions.propTypes}),C(Co,"widgetName","group"),C(Co,"defaultProps",{content:"",widgets:{},images:{},metadata:void 0});const{PropCheckBox:So}=e.components;class ko extends d.Component{constructor(){var t;super(...arguments),t=this,C(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),C(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){return d.createElement("fieldset",null,d.createElement("label",null,"Name:",d.createElement(Ls,{value:this.props.name,onChange:this.change("name")})),d.createElement("label",null,"Value:",d.createElement(Ls,{value:this.props.value,onChange:this.change("value")})))}}C(ko,"propTypes",{...e.Changeable.propTypes,name:g.default.string,value:g.default.string}),C(ko,"defaultProps",{name:"",value:""});class No extends d.Component{constructor(){var t;super(...arguments),t=this,C(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),C(this,"handlePairChange",((e,t)=>{const n=this.props.pairs.slice();n[e]=t;const r=n[n.length-1];r.name&&r.value&&n.push({name:"",value:""}),this.change("pairs",n)})),C(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){const e=f.default.map(this.props.pairs,((e,t)=>d.createElement(ko,{key:t,name:e.name,value:e.value,onChange:this.handlePairChange.bind(this,t)})));return d.createElement("div",null,e)}}C(No,"propTypes",{...e.Changeable.propTypes,pairs:g.default.arrayOf(g.default.shape({name:g.default.string,value:g.default.string})).isRequired});class To extends d.Component{constructor(){var t;super(...arguments),t=this,C(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),C(this,"handleSettingsChange",(e=>{this.change({settings:e.pairs})})),C(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){return d.createElement("div",null,d.createElement("div",{style:{fontWeight:"bold",textAlign:"center"}},"This widget is deprecated! ",d.createElement("br",null),"Try using the Video or CS Program widgets instead."),d.createElement("label",null,"Url or Program ID:",d.createElement(Ls,{value:this.props.url,onChange:this.change("url")})),d.createElement("br",null),d.createElement("label",null,"Settings:",d.createElement(No,{name:"settings",pairs:this.props.settings,onChange:this.handleSettingsChange})),d.createElement("br",null),d.createElement("label",null,"Width:",d.createElement(Ls,{value:this.props.width,onChange:this.change("width")})),d.createElement("label",null,"Height:",d.createElement(Ls,{value:this.props.height,onChange:this.change("height")})),d.createElement(So,{label:"Allow full screen",allowFullScreen:this.props.allowFullScreen,onChange:this.props.onChange}),d.createElement("br",null),d.createElement(So,{label:"Allow iframe content to redirect the page",allowTopNavigation:this.props.allowTopNavigation,onChange:this.props.onChange}))}}C(To,"propTypes",{...e.Changeable.propTypes}),C(To,"widgetName","iframe"),C(To,"defaultProps",{url:"",settings:[{name:"",value:""}],width:"400",height:"400",allowFullScreen:!1,allowTopNavigation:!1});const{InfoTip:_o,InlineIcon:Oo,RangeInput:Mo}=e.components,Ao=[0,10],Po={url:null,width:0,height:0},Do=new RegExp("^(https?|web\\+graphie)://[^/]*(ka-.*.s3.amazonaws.com|(fastly|cdn).kastatic.org|khanacademy.org|kasandbox.org)"),Io=["center","above","above right","right","below right","below","below left","left","above left"],Ro=v.default({displayName:"ImageEditor",propTypes:{...e.Changeable.propTypes},statics:{widgetName:"image"},componentDidMount:function(){this._isMounted=!0},componentWillUnmount:function(){this._isMounted=!1},getDefaultProps:function(){return{title:"",range:[Ao,Ao],box:[400,400],backgroundImage:Po,labels:[],alt:"",caption:""}},getInitialState:function(){return{backgroundImageError:""}},render:function(){const e=this.props.backgroundImage,t=d.createElement("div",{className:"image-settings"},d.createElement("div",null,d.createElement("label",null,d.createElement("div",null,"Alt text:",d.createElement(_o,null,"This is important for screenreaders. The content of this alt text will be formatted as markdown (tables, emphasis, etc. are supported).")),d.createElement(Un,{apiOptions:this.props.apiOptions,content:this.props.alt,onChange:e=>{null!=e.content&&this.change("alt",e.content)},widgetEnabled:!1}))),d.createElement("div",null,d.createElement("label",null,d.createElement("div",null,"Caption:"),d.createElement(Un,{apiOptions:this.props.apiOptions,content:this.props.caption,onChange:e=>{null!=e.content&&this.change("caption",e.content)},widgetEnabled:!1})))),n=d.createElement("div",{className:"renderer-widget-error"},this.state.backgroundImageError);return d.createElement("div",{className:"perseus-image-editor"},d.createElement("label",null,"Image url:",d.createElement(_o,null,"Paste an image or graphie image URL."),this.state.backgroundImageError&&n,d.createElement(Ls,{value:e.url||"",style:{width:332},onChange:e=>this.onUrlChange(e,!1)})),e.url&&t)},_renderRowForLabel:function(t,n){return d.createElement("tr",{key:n},d.createElement("td",null,d.createElement(Mo,{value:t.coordinates,onChange:this.onCoordinateChange.bind(this,n)})),d.createElement("td",{style:{verticalAlign:"bottom",width:"5px"}},d.createElement("input",{type:"text",className:"graph-settings-axis-label",value:t.content,onChange:this.onContentChange.bind(this,n)})),d.createElement("td",null,d.createElement("select",{className:"perseus-widget-dropdown",value:t.alignment,onChange:this.onAlignmentChange.bind(this,n)},Io.map((function(e,t){return d.createElement("option",{key:""+t,value:e},e)}),this))),d.createElement("td",null,d.createElement("a",{href:"#",className:"simple-button orange delete-label",title:"Remove this label",onClick:this.removeLabel.bind(this,n)},d.createElement(Oo,e.icons.iconTrash))))},change(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return e.Changeable.change.apply(this,n)},removeLabel:function(e,t){t.preventDefault();const n=f.default(this.props.labels).clone();n.splice(e,1),this.props.onChange({labels:n})},onCoordinateChange:function(e,t){const n=this.props.labels.slice();n[e]=f.default.extend({},n[e],{coordinates:t}),this.props.onChange({labels:n})},onContentChange:function(e,t){const n=t.target.value,r=this.props.labels.slice();r[e]=f.default.extend({},r[e],{content:n}),this.props.onChange({labels:r})},onAlignmentChange:function(e,t){const n=t.target.value,r=this.props.labels.slice();r[e]=f.default.extend({},r[e],{alignment:n}),this.props.onChange({labels:r})},setUrl:function(e,t,n,r){if(!this._isMounted)return;const s=f.default.clone(this.props.backgroundImage);s.url=e,s.width=t,s.height=n;const a=[s.width,s.height];this.props.onChange({backgroundImage:s,box:a},null,r)},onUrlChange:function(t,n){Do.test(t)?(this.setState({backgroundImageError:""}),this._leadingUrl=t,t?e.Util.getImageSize(t,((e,n)=>{this._leadingUrl===t&&this.setUrl(t,e,n,!0)})):this.setUrl(t,0,0,n)):this.setState({backgroundImageError:"Images must be from sites hosted by Khan Academy. Please input a Khan Academy-owned address, or use the Add Image tool to rehost an existing image"})},onRangeChange:function(e,t){const n=this.props.range.slice();n[e]=t,this.props.onChange({range:n})},serialize(){return e.EditorJsonify.serialize.call(this)}}),{InfoTip:zo}=e.components,Lo={number:{name:"Numbers",forms:"integer, decimal, proper, improper, mixed"},decimal:{name:"Decimals",forms:"decimal"},integer:{name:"Integers",forms:"integer"},rational:{name:"Fractions and mixed numbers",forms:"integer, proper, improper, mixed"},improper:{name:"Improper numbers (no mixed)",forms:"integer, proper, improper"},mixed:{name:"Mixed numbers (no improper)",forms:"integer, proper, mixed"},percent:{name:"Numbers or percents",forms:"integer, decimal, proper, improper, mixed, percent"},pi:{name:"Numbers with pi",forms:"pi"}};class Fo extends d.Component{constructor(){super(...arguments),C(this,"handleAnswerChange",(t=>{const n=e.Util.firstNumericalParse(t)||0;this.props.onChange({value:n})})),C(this,"focus",(()=>(E.default.findDOMNode(this.refs.input).focus(),!0))),C(this,"serialize",(()=>f.default.pick(this.props,"value","simplify","size","inexact","maxError","answerType","rightAlign")))}render(){const t=f.default.map(Lo,(function(e,t){return d.createElement("option",{value:t,key:t},e.name)}),this);return d.createElement("div",null,d.createElement("div",null,d.createElement("label",null,"Correct answer:"," ",d.createElement(Ls,{value:""+this.props.value,onChange:this.handleAnswerChange,ref:"input"}))),d.createElement("div",null,d.createElement("label",null,"Unsimplified answers"," ",d.createElement("select",{value:this.props.simplify,onChange:e=>{this.props.onChange({simplify:e.target.value})}},d.createElement("option",{value:"required"},"will not be graded"),d.createElement("option",{value:"optional"},"will be accepted"),d.createElement("option",{value:"enforced"},"will be marked wrong"))),d.createElement(zo,null,d.createElement("p",null,'Normally select "will not be graded". This will give the user a message saying the answer is correct but not simplified. The user will then have to simplify it and re-enter, but will not be penalized. (5th grade and anything after)'),d.createElement("p",null,'Select "will be accepted" only if the user is not expected to know how to simplify fractions yet. (Anything prior to 5th grade)'),d.createElement("p",null,'Select "will be marked wrong" only if we are specifically assessing the ability to simplify.'))),d.createElement("div",null,d.createElement("label",null,d.createElement("input",{type:"checkbox",checked:this.props.inexact,onChange:e=>{this.props.onChange({inexact:e.target.checked})}})," ","Allow inexact answers"),d.createElement("label",null,d.createElement("input",{type:"checkbox",style:{visibility:"hidden"}}),"Max error:"," ",d.createElement("input",{type:"text",disabled:!this.props.inexact,defaultValue:this.props.maxError,onBlur:t=>{const n=""+(e.Util.firstNumericalParse(t.target.value)||0);t.target.value=n,this.props.onChange({maxError:n})}}))),d.createElement("div",null,"Answer type:"," ",d.createElement("select",{value:this.props.answerType,onChange:e=>{this.props.onChange({answerType:e.target.value})}},t),d.createElement(zo,null,d.createElement("p",null,'Use the default "Numbers" unless the answer must be in a specific form (e.g., question is about converting decimals to fractions).'))),d.createElement("div",null,d.createElement("label",null,"Width"," ",d.createElement("select",{value:this.props.size,onChange:e=>{this.props.onChange({size:e.target.value})}},d.createElement("option",{value:"normal"},"Normal (80px)"),d.createElement("option",{value:"small"},"Small (40px)"))),d.createElement(zo,null,d.createElement("p",null,'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.'))),d.createElement("div",null,d.createElement("label",null,d.createElement("input",{type:"checkbox",checked:this.props.rightAlign,onChange:e=>{this.props.onChange({rightAlign:e.target.checked})}})," ","Right alignment")))}}C(Fo,"propTypes",{value:g.default.number,simplify:g.default.oneOf(["required","optional","enforced"]),size:g.default.oneOf(["normal","small"]),inexact:g.default.bool,maxError:g.default.number,answerType:g.default.string,rightAlign:g.default.bool}),C(Fo,"widgetName","input-number"),C(Fo,"defaultProps",{value:0,simplify:"required",size:"normal",inexact:!1,maxError:.1,answerType:"number",rightAlign:!1});const{ButtonGroup:Uo,MathInput:qo,NumberInput:Wo}=e.components;class Vo extends d.Component{constructor(){super(...arguments),C(this,"change",(t=>e.Changeable.change.call(this,t)))}render(){const{TeX:t}=e.Dependencies.getDependencies();return d.createElement("div",null,d.createElement("div",{className:"perseus-widget-row"},"Constraint:"," ",d.createElement(Uo,{value:this.props.constraint,allowEmpty:!1,buttons:[{value:"none",content:"None"},{value:"snap",content:"Snap"},{value:"x",content:"x="},{value:"y",content:"y="}],onChange:this.change("constraint")})),"snap"===this.props.constraint&&d.createElement("div",{className:"perseus-widget-row"},"Snap:"," ",d.createElement(Wo,{value:this.props.snap,placeholder:0,onChange:this.change("snap")})),"x"===this.props.constraint&&d.createElement("div",{className:"graph-settings"},d.createElement("div",{className:"perseus-widget-row"},d.createElement(t,null,"x=")," ",d.createElement(qo,{buttonSets:[],buttonsVisible:"never",value:this.props.constraintFn,onChange:this.change("constraintFn")}))),"y"===this.props.constraint&&d.createElement("div",{className:"graph-settings"},d.createElement("div",{className:"perseus-widget-row"},d.createElement(t,null,"y=")," ",d.createElement(qo,{buttonSets:[],buttonsVisible:"never",value:this.props.constraintFn,onChange:this.change("constraintFn")}))),"Ensure these are set so nothing can be dragged off the canvas:",d.createElement("div",{className:"perseus-widget-row"},d.createElement("div",{className:"perseus-widget-row"},d.createElement(t,null,"x \\in \\Large[")," ",d.createElement(qo,{buttonSets:[],buttonsVisible:"never",value:this.props.constraintXMin,onChange:this.change("constraintXMin")}),d.createElement(t,null,", ")," ",d.createElement(qo,{buttonSets:[],buttonsVisible:"never",value:this.props.constraintXMax,onChange:this.change("constraintXMax")})," ",d.createElement(t,null,"\\Large]"))),d.createElement("div",{className:"perseus-widget-row"},d.createElement("div",{className:"perseus-widget-row"},d.createElement(t,null,"y \\in \\Large[")," ",d.createElement(qo,{buttonSets:[],buttonsVisible:"never",value:this.props.constraintYMin,onChange:this.change("constraintYMin")}),d.createElement(t,null,", ")," ",d.createElement(qo,{buttonSets:[],buttonsVisible:"never",value:this.props.constraintYMax,onChange:this.change("constraintYMax")})," ",d.createElement(t,null,"\\Large]"))))}}C(Vo,"defaultProps",{constraint:"none",snap:.5,constraintFn:"0",constraintXMin:"-10",constraintXMax:"10",constraintYMin:"-10",constraintYMax:"10"});const{MathInput:jo,NumberInput:Bo,TextInput:$o}=e.components,{getDependencies:Ho}=e.Dependencies,{unescapeMathMode:Go}=e.Util;class Yo extends d.Component{constructor(){var t;super(...arguments),t=this,C(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),C(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){const{TeX:t}=Ho();return d.createElement("div",{className:"graph-settings"},d.createElement("div",{className:"perseus-widget-row"},"Coordinate: ",d.createElement(t,null,"\\Large("),d.createElement(jo,{buttonSets:[],buttonsVisible:"never",value:this.props.coordX,onChange:this.change("coordX")}),d.createElement(t,null,",")," ",d.createElement(jo,{buttonSets:[],buttonsVisible:"never",value:this.props.coordY,onChange:this.change("coordY")}),d.createElement(t,null,"\\Large)")),d.createElement("div",{className:"perseus-widget-row"},d.createElement(e.ColorPicker,{value:this.props.color,onChange:this.change("color")})))}}C(Yo,"propTypes",{...e.Changeable.propTypes,coordX:g.default.string,coordY:g.default.string,color:g.default.string}),C(Yo,"defaultProps",{coordX:"0",coordY:"0",color:e.KhanColors.BLACK});class Ko extends d.Component{constructor(){var t;super(...arguments),t=this,C(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),C(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){const{TeX:t}=Ho();return d.createElement("div",{className:"graph-settings"},d.createElement("div",{className:"perseus-widget-row"},"Start: ",d.createElement(t,null,"\\Large("),d.createElement(jo,{buttonSets:[],buttonsVisible:"never",value:this.props.startX,onChange:this.change("startX")}),d.createElement(t,null,",")," ",d.createElement(jo,{buttonSets:[],buttonsVisible:"never",value:this.props.startY,onChange:this.change("startY")}),d.createElement(t,null,"\\Large)")),d.createElement("div",{className:"perseus-widget-row"},"End: ",d.createElement(t,null,"\\Large("),d.createElement(jo,{buttonSets:[],buttonsVisible:"never",value:this.props.endX,onChange:this.change("endX")}),d.createElement(t,null,",")," ",d.createElement(jo,{buttonSets:[],buttonsVisible:"never",value:this.props.endY,onChange:this.change("endY")}),d.createElement(t,null,"\\Large)")),d.createElement("div",{className:"perseus-widget-row"},d.createElement(e.ColorPicker,{value:this.props.color,onChange:this.change("color")})),d.createElement("div",{className:"perseus-widget-row"},d.createElement(e.DashPicker,{value:this.props.strokeDasharray,onChange:this.change("strokeDasharray")})," ",d.createElement(e.ArrowPicker,{value:this.props.arrows,onChange:this.change("arrows")})),d.createElement("div",{className:"perseus-widget-row"},d.createElement("div",{className:"perseus-widget-left-col"},"Width:"," ",d.createElement(Bo,{value:this.props.strokeWidth,placeholder:2,onChange:this.change("strokeWidth")}))))}}C(Ko,"propTypes",{...e.Changeable.propTypes,startX:g.default.string,startY:g.default.string,endX:g.default.string,endY:g.default.string,color:g.default.string,strokeDasharray:g.default.string,arrows:g.default.string,strokeWidth:g.default.number}),C(Ko,"defaultProps",{startX:"-5",startY:"5",endX:"5",endY:"5",color:e.KhanColors.BLACK,strokeDasharray:"",arrows:"",strokeWidth:2});class Jo extends d.Component{constructor(){var t;super(...arguments),t=this,C(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),C(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){const{TeX:e}=Ho();return d.createElement("div",{className:"graph-settings"},d.createElement("div",{className:"perseus-widget-row"},"Start: ",d.createElement(e,null,"\\Large("),d.createElement(jo,{buttonSets:[],buttonsVisible:"never",value:this.props.startX,onChange:this.change("startX")}),d.createElement(e,null,",")," ",d.createElement(jo,{buttonSets:[],buttonsVisible:"never",value:this.props.startY,onChange:this.change("startY")}),d.createElement(e,null,"\\Large)")),d.createElement("div",{className:"perseus-widget-row"},"Update ",d.createElement(e,null,"(x_n, y_n)")," for ",d.createElement(e,null,"n =")," ",d.createElement(Bo,{value:this.props.varSubscript,placeholder:0,onChange:this.change("varSubscript")})),d.createElement(Vo,this.props))}}C(Jo,"propTypes",{...e.Changeable.propTypes,startX:g.default.string,startY:g.default.string,constraint:g.default.string,snap:g.default.number,constraintFn:g.default.string}),C(Jo,"defaultProps",{startX:"0",startY:"0",constraint:"none",snap:.5,constraintFn:"0",constraintXMin:"-10",constraintXMax:"10",constraintYMin:"-10",constraintYMax:"10"});class Xo extends d.Component{constructor(){var t;super(...arguments),t=this,C(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),C(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){const{TeX:e}=Ho();return d.createElement("div",{className:"graph-settings"},"Initial position:",d.createElement("div",{className:"perseus-widget-row"},"Start: ",d.createElement(e,null,"\\Large("),d.createElement(jo,{buttonSets:[],buttonsVisible:"never",value:this.props.startX,onChange:this.change("startX")}),d.createElement(e,null,",")," ",d.createElement(jo,{buttonSets:[],buttonsVisible:"never",value:this.props.startY,onChange:this.change("startY")}),d.createElement(e,null,"\\Large)")),d.createElement("div",{className:"perseus-widget-row"},"End: ",d.createElement(e,null,"\\Large("),d.createElement(jo,{buttonSets:[],buttonsVisible:"never",value:this.props.endX,onChange:this.change("endX")}),d.createElement(e,null,",")," ",d.createElement(jo,{buttonSets:[],buttonsVisible:"never",value:this.props.endY,onChange:this.change("endY")}),d.createElement(e,null,"\\Large)")),d.createElement("div",{className:"perseus-widget-row"},"Start updates ",d.createElement(e,null,"(x_n, y_n)")," for ",d.createElement(e,null,"n ="),d.createElement(Bo,{value:this.props.startSubscript,placeholder:0,onChange:this.change("startSubscript")})),d.createElement("div",{className:"perseus-widget-row"},"End updates ",d.createElement(e,null,"(x_m, y_m)")," for ",d.createElement(e,null,"m ="),d.createElement(Bo,{value:this.props.endSubscript,placeholder:0,onChange:this.change("endSubscript")})),d.createElement("div",{className:"perseus-widget-row"},"All constraints are applied to the start point."),d.createElement(Vo,this.props))}}C(Xo,"propTypes",{...e.Changeable.propTypes,startX:g.default.string,startY:g.default.string,endX:g.default.string,endY:g.default.string,constraint:g.default.string,snap:g.default.number,constraintFn:g.default.string}),C(Xo,"defaultProps",{startX:"-5",startY:"5",endX:"5",endY:"5",constraint:"none",snap:.5,constraintFn:"0",constraintXMin:"-10",constraintXMax:"10",constraintYMin:"-10",constraintYMax:"10"});class Zo extends d.Component{constructor(){var t;super(...arguments),t=this,C(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),C(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){const{TeX:t}=Ho();return d.createElement("div",{className:"graph-settings"},d.createElement("div",{className:"perseus-widget-row"},d.createElement(t,null,this.props.funcName+"(x)=")," ",d.createElement(jo,{buttonSets:[],buttonsVisible:"never",value:this.props.value,onChange:this.change("value")})),d.createElement("div",{className:"perseus-widget-row"},"Range: ",d.createElement(t,null,"\\Large("),d.createElement(jo,{buttonSets:[],buttonsVisible:"never",value:this.props.rangeMin,onChange:this.change("rangeMin")}),d.createElement(t,null,",")," ",d.createElement(jo,{buttonSets:[],buttonsVisible:"never",value:this.props.rangeMax,onChange:this.change("rangeMax")}),d.createElement(t,null,"\\Large)")),d.createElement("div",{className:"perseus-widget-row"},d.createElement(e.ColorPicker,{value:this.props.color,onChange:this.change("color")})),d.createElement("div",{className:"perseus-widget-row"},d.createElement(e.DashPicker,{value:this.props.strokeDasharray,onChange:this.change("strokeDasharray")})),d.createElement("div",{className:"perseus-widget-row"},d.createElement("div",{className:"perseus-widget-left-col"},"Width:"," ",d.createElement(Bo,{value:this.props.strokeWidth,placeholder:2,onChange:this.change("strokeWidth")}))))}}C(Zo,"propTypes",{...e.Changeable.propTypes,value:g.default.string,rangeMin:g.default.string,rangeMax:g.default.string,color:g.default.string,strokeDashArray:g.default.string,strokeWidth:g.default.number}),C(Zo,"defaultProps",{value:"x",rangeMin:"-10",rangeMax:"10",color:e.KhanColors.BLUE,strokeDasharray:"",strokeWidth:2});class Qo extends d.Component{constructor(){var t;super(...arguments),t=this,C(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),C(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){const{TeX:t}=Ho();return d.createElement("div",{className:"graph-settings"},d.createElement("div",{className:"perseus-widget-row"},d.createElement(t,null,"X(t) =")," ",d.createElement(jo,{buttonSets:[],buttonsVisible:"never",value:this.props.x,onChange:this.change("x")})),d.createElement("div",{className:"perseus-widget-row"},d.createElement(t,null,"Y(t) =")," ",d.createElement(jo,{buttonSets:[],buttonsVisible:"never",value:this.props.y,onChange:this.change("y")})),d.createElement("div",{className:"perseus-widget-row"},"Range: ",d.createElement(t,null,"\\Large("),d.createElement(jo,{buttonSets:[],buttonsVisible:"never",value:this.props.rangeMin,onChange:this.change("rangeMin")}),d.createElement(t,null,",")," ",d.createElement(jo,{buttonSets:[],buttonsVisible:"never",value:this.props.rangeMax,onChange:this.change("rangeMax")}),d.createElement(t,null,"\\Large)")),d.createElement("div",{className:"perseus-widget-row"},d.createElement(e.ColorPicker,{value:this.props.color,onChange:this.change("color")})),d.createElement("div",{className:"perseus-widget-row"},d.createElement(e.DashPicker,{value:this.props.strokeDasharray,onChange:this.change("strokeDasharray")})),d.createElement("div",{className:"perseus-widget-row"},d.createElement("div",{className:"perseus-widget-left-col"},"Width:"," ",d.createElement(Bo,{value:this.props.strokeWidth,placeholder:2,onChange:this.change("strokeWidth")}))))}}C(Qo,"propTypes",{...e.Changeable.propTypes,x:g.default.string,y:g.default.string,rangeMin:g.default.string,rangeMax:g.default.string,color:g.default.string,strokeDashArray:g.default.string,strokeWidth:g.default.number}),C(Qo,"defaultProps",{x:"cos(t)",y:"sin(t)",rangeMin:"0",rangeMax:"2\\pi",color:e.KhanColors.BLUE,strokeDasharray:"",strokeWidth:2});class el extends d.Component{constructor(){var t;super(...arguments),t=this,C(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),C(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){const{TeX:t}=Ho();return d.createElement("div",{className:"graph-settings"},d.createElement("div",{className:"perseus-widget-row"},d.createElement($o,{value:this.props.label,onChange:this.change("label"),style:{width:"100%"}})),d.createElement("div",{className:"perseus-widget-row"},"Location: ",d.createElement(t,null,"\\Large("),d.createElement(jo,{buttonSets:[],buttonsVisible:"never",value:this.props.coordX,onChange:this.change("coordX")}),d.createElement(t,null,",")," ",d.createElement(jo,{buttonSets:[],buttonsVisible:"never",value:this.props.coordY,onChange:this.change("coordY")}),d.createElement(t,null,"\\Large)")),d.createElement("div",{className:"perseus-widget-row"},d.createElement(e.ColorPicker,{value:this.props.color,onChange:this.change("color")})))}}C(el,"propTypes",{...e.Changeable.propTypes,color:g.default.string,coordX:g.default.string,coordY:g.default.string,label:g.default.string}),C(el,"defaultProps",{coordX:"0",coordY:"0",color:e.KhanColors.BLACK,label:"\\phi"});class tl extends d.Component{constructor(){var t;super(...arguments),t=this,C(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),C(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){const{TeX:t}=Ho();return d.createElement("div",{className:"graph-settings"},d.createElement("div",{className:"perseus-widget-row"},"Bottom left: ",d.createElement(t,null,"\\Large("),d.createElement(jo,{buttonSets:[],buttonsVisible:"never",value:this.props.coordX,onChange:this.change("coordX")}),d.createElement(t,null,",")," ",d.createElement(jo,{buttonSets:[],buttonsVisible:"never",value:this.props.coordY,onChange:this.change("coordY")}),d.createElement(t,null,"\\Large)")),d.createElement("div",{className:"perseus-widget-row"},"Width:"," ",d.createElement(jo,{buttonSets:[],buttonsVisible:"never",value:this.props.width,onChange:this.change("width")})),d.createElement("div",{className:"perseus-widget-row"},"Height:"," ",d.createElement(jo,{buttonSets:[],buttonsVisible:"never",value:this.props.height,onChange:this.change("height")})),d.createElement("div",{className:"perseus-widget-row"},d.createElement(e.ColorPicker,{value:this.props.color,lightColors:!0,onChange:this.change("color")})),d.createElement("div",{className:"perseus-widget-row"},"You want a border? Sorry, draw your own."))}}C(tl,"propTypes",{...e.Changeable.propTypes,color:g.default.string,coordX:g.default.string,coordY:g.default.string,height:g.default.string,width:g.default.string}),C(tl,"defaultProps",{coordX:"-5",coordY:"5",width:"2",height:"3",color:e.KhanColors.LIGHT_BLUE});class nl extends d.Component{constructor(){var t;super(...arguments),t=this,C(this,"state",{usedVarSubscripts:this._getAllVarSubscripts(this.props.elements),usedFunctionNames:this._getAllFunctionNames(this.props.elements)}),C(this,"_updateGraphProps",(e=>{this.change({graph:f.default.extend(f.default.omit(e,"step"),{tickStep:e.step})})})),C(this,"_addNewElement",(e=>{const t=e.target.value;if(""===t)return;e.target.value="";const n={type:t,key:t+"-"+(16777215*Math.random()<<0).toString(16),options:"point"===t?f.default.clone(Yo.defaultProps):"line"===t?f.default.clone(Ko.defaultProps):"movable-point"===t?f.default.clone(Jo.defaultProps):"movable-line"===t?f.default.clone(Xo.defaultProps):"function"===t?f.default.clone(Zo.defaultProps):"parametric"===t?f.default.clone(Qo.defaultProps):"label"===t?f.default.clone(el.defaultProps):"rectangle"===t?f.default.clone(tl.defaultProps):{}};let r;if("movable-point"===t)r=f.default.max([f.default.max(this.state.usedVarSubscripts),-1])+1,n.options.varSubscript=r;else if("movable-line"===t)r=f.default.max([f.default.max(this.state.usedVarSubscripts),-1])+1,n.options.startSubscript=r,n.options.endSubscript=r+1;else if("function"===t){const e=String.fromCharCode(f.default.max([f.default.max(f.default.map(this.state.usedFunctionNames,(function(e){return e.charCodeAt(0)}))),"e".charCodeAt(0)])+1);n.options.funcName=e}this.change({elements:this.props.elements.concat(n)})})),C(this,"_deleteElement",(e=>{const t=this.props.elements[e];this.change({elements:f.default.without(this.props.elements,t)})})),C(this,"_moveElementUp",(e=>{const t=this.props.elements[e],n=f.default.without(this.props.elements,t);n.splice(e-1,0,t),this.change({elements:n})})),C(this,"_moveElementDown",(e=>{const t=this.props.elements[e],n=f.default.without(this.props.elements,t);n.splice(e+1,0,t),this.change({elements:n})})),C(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),C(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}UNSAFE_componentWillReceiveProps(e){this.setState({usedVarSubscripts:this._getAllVarSubscripts(e.elements),usedFunctionNames:this._getAllFunctionNames(e.elements)})}_getAllVarSubscripts(e){return f.default.map(f.default.where(e,{type:"movable-point"}),(e=>e.options.varSubscript)).concat(f.default.map(f.default.where(e,{type:"movable-line"}),(e=>e.options.startSubscript))).concat(f.default.map(f.default.where(e,{type:"movable-line"}),(e=>e.options.endSubscript)))}_getAllFunctionNames(e){return f.default.map(f.default.where(e,{type:"function"}),(e=>e.options.funcName))}render(){const{TeX:t}=Ho();return d.createElement("div",{className:"perseus-widget-interaction-editor"},d.createElement(e.ElementContainer,{title:"Grid settings"},d.createElement(co,{editableSettings:["canvas","graph"],box:this.props.graph.box,labels:this.props.graph.labels,range:this.props.graph.range,step:this.props.graph.tickStep,gridStep:this.props.graph.gridStep,markings:this.props.graph.markings,onChange:this._updateGraphProps}),!0!==this.props.graph.valid&&d.createElement("div",null,this.props.graph.valid)),f.default.map(this.props.elements,(function(n,r){return"movable-point"===n.type?d.createElement(e.ElementContainer,{title:d.createElement("span",null,"Movable point"," ",d.createElement(t,null,"(x_{"+n.options.varSubscript+"}, y_{"+n.options.varSubscript+"})")),onUp:0===r?null:this._moveElementUp.bind(this,r),onDown:r===this.props.elements.length-1?null:this._moveElementDown.bind(this,r),onDelete:this._deleteElement.bind(this,r),key:n.key},d.createElement(Jo,S({},n.options,{onChange:e=>{const t=JSON.parse(JSON.stringify(this.props.elements));f.default.extend(t[r].options,e),this.change({elements:t})}}))):"movable-line"===n.type?d.createElement(e.ElementContainer,{title:d.createElement("span",null,"Movable line"," ",d.createElement(t,null,"(x_{"+n.options.startSubscript+"}, y_{"+n.options.startSubscript+"})")," ","to"," ",d.createElement(t,null,"(x_{"+n.options.endSubscript+"}, y_{"+n.options.endSubscript+"})")),onUp:0===r?null:this._moveElementUp.bind(this,r),onDown:r===this.props.elements.length-1?null:this._moveElementDown.bind(this,r),onDelete:this._deleteElement.bind(this,r),key:n.key},d.createElement(Xo,S({},n.options,{onChange:e=>{const t=JSON.parse(JSON.stringify(this.props.elements));f.default.extend(t[r].options,e),this.change({elements:t})}}))):"point"===n.type?d.createElement(e.ElementContainer,{title:d.createElement("span",null,"Point"," ",d.createElement(t,null,"("+n.options.coordX+", "+n.options.coordY+")")),onUp:0===r?null:this._moveElementUp.bind(this,r),onDown:r===this.props.elements.length-1?null:this._moveElementDown.bind(this,r),onDelete:this._deleteElement.bind(this,r),key:n.key},d.createElement(Yo,S({},n.options,{onChange:e=>{const t=JSON.parse(JSON.stringify(this.props.elements));f.default.extend(t[r].options,e),this.change({elements:t})}}))):"line"===n.type?d.createElement(e.ElementContainer,{title:d.createElement("span",null,"Line"," ",d.createElement(t,null,"("+n.options.startX+", "+n.options.startY+")")," ","to"," ",d.createElement(t,null,"("+n.options.endX+", "+n.options.endY+")")),onUp:0===r?null:this._moveElementUp.bind(this,r),onDown:r===this.props.elements.length-1?null:this._moveElementDown.bind(this,r),onDelete:this._deleteElement.bind(this,r),key:n.key},d.createElement(Ko,S({},n.options,{onChange:e=>{const t=JSON.parse(JSON.stringify(this.props.elements));f.default.extend(t[r].options,e),this.change({elements:t})}}))):"function"===n.type?d.createElement(e.ElementContainer,{title:d.createElement("span",null,"Function"," ",d.createElement(t,null,n.options.funcName+"(x) = "+n.options.value)),onUp:0===r?null:this._moveElementUp.bind(this,r),onDown:r===this.props.elements.length-1?null:this._moveElementDown.bind(this,r),onDelete:this._deleteElement,key:n.key},d.createElement(Zo,S({},n.options,{onChange:e=>{const t=JSON.parse(JSON.stringify(this.props.elements));f.default.extend(t[r].options,e),this.change({elements:t})}}))):"parametric"===n.type?d.createElement(e.ElementContainer,{title:d.createElement("span",null,"Parametric"),onUp:0===r?null:this._moveElementUp.bind(this,r),onDown:r===this.props.elements.length-1?null:this._moveElementDown.bind(this,r),onDelete:this._deleteElement,key:n.key},d.createElement(Qo,S({},n.options,{onChange:e=>{const t=JSON.parse(JSON.stringify(this.props.elements));f.default.extend(t[r].options,e),this.change({elements:t})}}))):"label"===n.type?d.createElement(e.ElementContainer,{title:d.createElement("span",null,"Label"," ",d.createElement(t,null,Go(n.options.label))," "),onUp:0===r?null:this._moveElementUp.bind(this,r),onDown:r===this.props.elements.length-1?null:this._moveElementDown.bind(this,r),onDelete:this._deleteElement,key:n.key},d.createElement(el,S({},n.options,{onChange:e=>{const t=JSON.parse(JSON.stringify(this.props.elements));f.default.extend(t[r].options,e),this.change({elements:t})}}))):"rectangle"===n.type?d.createElement(e.ElementContainer,{title:d.createElement("span",null,"Rectangle"," ",d.createElement(t,null,"("+n.options.coordX+", "+n.options.coordY+")")," — ",d.createElement(t,null,n.options.width+" \\times "+n.options.height)),onUp:0===r?null:this._moveElementUp.bind(this,r),onDown:r===this.props.elements.length-1?null:this._moveElementDown.bind(this,r),onDelete:this._deleteElement,key:n.key},d.createElement(tl,S({},n.options,{onChange:e=>{const t=JSON.parse(JSON.stringify(this.props.elements));f.default.extend(t[r].options,e),this.change({elements:t})}}))):void 0}),this),d.createElement("div",{className:"perseus-widget-interaction-editor-select-element"},d.createElement("select",{onChange:this._addNewElement},d.createElement("option",{value:""},"Add an element","…"),d.createElement("option",{disabled:!0},"--"),d.createElement("option",{value:"point"},"Point"),d.createElement("option",{value:"line"},"Line segment"),d.createElement("option",{value:"function"},"Function plot"),d.createElement("option",{value:"parametric"},"Parametric plot"),d.createElement("option",{value:"label"},"Label"),d.createElement("option",{value:"rectangle"},"Rectangle"),d.createElement("option",{value:"movable-point"},"★ Movable point"),d.createElement("option",{value:"movable-line"},"★ Movable line segment"))))}}C(nl,"propTypes",{...e.Changeable.propTypes,elements:g.default.arrayOf(g.default.object),graph:g.default.objectOf(g.default.any)}),C(nl,"widgetName","interaction"),C(nl,"defaultProps",{graph:{box:[400,400],labels:["x","y"],range:[[-10,10],[-10,10]],tickStep:[1,1],gridStep:[1,1],markings:"graph"},elements:[]});const{InfoTip:rl}=e.components,{containerSizeClass:sl,getInteractiveBoxFromSizeClass:al}=e.SizingUtils,il=e.Util.DeprecationMixin,ol=e.InteractiveGraphWidget.widget,ll={url:null},cl=v.default({displayName:"InteractiveGraphEditor",className:"perseus-widget-interactive-graph",statics:{widgetName:"interactive-graph"},getDefaultProps:function(){return{labels:["x","y"],range:[[-10,10],[-10,10]],step:[1,1],valid:!0,backgroundImage:ll,markings:"graph",showProtractor:!1,showRuler:!1,showTooltips:!1,rulerLabel:"",rulerTicks:10,correct:{type:"linear",coords:null}}},deprecatedProps:{showGraph:function(e){return{markings:e.showGraph?"graph":"none"}}},UNSAFE_componentWillMount(){il.UNSAFE_componentWillMount.call(this)},render:function(){let t,n;const r=this.props.gridStep||e.Util.getGridStep(this.props.range,this.props.step,e.interactiveSizes.defaultBoxSize),s=this.props.snapStep||e.Util.snapStepFromGridStep(r),a=sl.SMALL;if(!0===this.props.valid){const e={ref:"graph",box:this.props.box,range:this.props.range,labels:this.props.labels,step:this.props.step,gridStep:r,snapStep:s,graph:this.props.correct,backgroundImage:this.props.backgroundImage,markings:this.props.markings,showProtractor:this.props.showProtractor,showRuler:this.props.showRuler,rulerLabel:this.props.rulerLabel,rulerTicks:this.props.rulerTicks,trackInteraction:function(){},onChange:e=>{let t=this.props.correct;t=t.type===e.graph.type?f.default.extend({},t,e.graph):e.graph,this.props.onChange({correct:t})}};t=d.createElement(ol,S({},e,{containerSizeClass:a,apiOptions:{...this.props.apiOptions,isMobile:!1}})),n=ol.getEquationString(e)}else t=d.createElement("div",{className:"perseus-error"},this.props.valid);return d.createElement("div",{className:"perseus-widget-interactive-graph"},d.createElement("div",null,"Correct answer"," ",d.createElement(rl,null,d.createElement("p",null,"Graph the correct answer in the graph below and ensure the equation or point coordinates displayed represent the correct answer."))," ",": ",n),d.createElement(co,{box:al(a),range:this.props.range,labels:this.props.labels,step:this.props.step,gridStep:r,snapStep:s,valid:this.props.valid,backgroundImage:this.props.backgroundImage,markings:this.props.markings,showProtractor:this.props.showProtractor,showRuler:this.props.showRuler,showTooltips:this.props.showTooltips,rulerLabel:this.props.rulerLabel,rulerTicks:this.props.rulerTicks,onChange:this.props.onChange}),"polygon"===this.props.correct.type&&d.createElement("div",{className:"type-settings"},d.createElement("label",null," ","Student answer must"," ",d.createElement("select",{value:this.props.correct.match,onChange:this.changeMatchType},d.createElement("option",{value:"exact"},"match exactly"),d.createElement("option",{value:"congruent"},"be congruent"),d.createElement("option",{value:"approx"},"be approximately congruent"),d.createElement("option",{value:"similar"},"be similar"))),d.createElement(rl,null,d.createElement("ul",null,d.createElement("li",null,d.createElement("p",null,d.createElement("b",null,"Match Exactly:")," Match exactly in size, orientation, and location on the grid even if it is not shown in the background.")),d.createElement("li",null,d.createElement("p",null,d.createElement("b",null,"Be Congruent:")," Be congruent in size and shape, but can be located anywhere on the grid.")),d.createElement("li",null,d.createElement("p",null,d.createElement("b",null,"Be Approximately Congruent:")," Be exactly similar, and congruent in size and shape to within 0.1 units, but can be located anywhere on the grid."," ",d.createElement("em",null,"Use this with snapping to angle measure."))),d.createElement("li",null,d.createElement("p",null,d.createElement("b",null,"Be Similar:")," Be similar with matching interior angles, and side measures that are matching or a multiple of the correct side measures. The figure can be located anywhere on the grid."))))),"angle"===this.props.correct.type&&d.createElement("div",{className:"type-settings"},d.createElement("div",null,d.createElement("label",null," ","Student answer must"," ",d.createElement("select",{value:this.props.correct.match,onChange:this.changeMatchType},d.createElement("option",{value:"exact"},"match exactly"),d.createElement("option",{value:"congruent"},"be congruent"))),d.createElement(rl,null,d.createElement("p",null,"Congruency requires only that the angle measures are the same. An exact match implies congruency, but also requires that the angles have the same orientation and that the vertices are in the same position.")))),t)},changeMatchType:function(e){const t=f.default.extend({},this.props.correct,{match:e.target.value});this.props.onChange({correct:t})},serialize:function(){const e=f.default.pick(this.props,"step","backgroundImage","markings","labels","showProtractor","showRuler","showTooltips","rulerLabel","rulerTicks","range","gridStep","snapStep"),t=this.refs.graph;if(t){const n=t&&t.getUserInput();f.default.extend(e,{graph:{type:n.type},correct:n}),f.default.each(["allowReflexAngles","angleOffsetDeg","numPoints","numSides","numSegments","showAngles","showSides","snapTo","snapDegrees"],(function(t){f.default.has(n,t)&&(e.graph[t]=n[t])}))}return e}});class pl extends d.Component{constructor(){super(...arguments),C(this,"state",{focused:!1}),C(this,"handleBlur",(e=>{const{onBlur:t}=this.props;t&&t(e),this.setState({focused:!1})})),C(this,"handleFocus",(e=>{const{onFocus:t}=this.props;t&&t(e),this.setState({focused:!0})})),C(this,"disableDefault",(e=>{e.preventDefault()}))}render(){const{forwardedRef:e,width:t,grow:n,shrink:r,icon:s,backgroundColor:a,focusBorderColor:i,borderColor:l,color:c,onSubmit:p,leftSideIcon:h,id:u,testId:m,type:f,labelMediumInputText:g,...v}=this.props,{focused:y}=this.state,b={},E=[hl.input,hl.container];t&&(b.width=t),n&&(b.flexGrow=!0===n?1:n),(r||0===r)&&(b.flexShrink=!0===r?0:r),a?b.backgroundColor=a:E.push(hl.defaultBackground),c&&(b.color=c);const w=y?i||rn.blue:l||rn.offBlack16;b.border="1px solid ".concat(w);const x=s&&d.createElement("span",{className:o.css(hl.icon)},s),C=g?hl.labelMediumInputBase:hl.inputBase;return d.createElement("form",{className:o.css(E),style:b,onSubmit:p||this.disableDefault},h&&x,d.createElement("input",S({},v,{onFocus:this.handleFocus,onBlur:this.handleBlur,type:f,className:o.css(C),ref:e,id:u,"data-test-id":m})),!h&&x)}}const hl=o.StyleSheet.create({inputBase:{background:"inherit",border:"none",...e.globalStyles.typography.bodyXsmall,outline:"none","::placeholder":{color:e.globalStyles.colors.gray41},width:"100%",color:"inherit",marginBottom:0,paddingLeft:0,boxShadow:"none",padding:0,margin:0},labelMediumInputBase:{background:"inherit",border:"none",outline:"none","::placeholder":{color:e.globalStyles.colors.gray41},width:"100%",fontWeight:"normal",fontFamily:"Lato, san-serif",fontSize:"16px",lineHeight:"20px"},input:{height:40,borderRadius:e.globalStyles.borderRadius,boxSizing:"border-box",padding:"8px 10px"},container:{display:"inline-flex",alignItems:"center",marginBottom:0},defaultBackground:{backgroundColor:e.globalStyles.colors.white},icon:{display:"flex",alignItems:"center",justifyContent:"center"}});var ul=d.forwardRef(((e,t)=>d.createElement(pl,S({},e,{forwardedRef:t}))));class dl extends d.Component{render(){const{children:e,className:t,highlighted:n,href:r,inlineStyles:s,referrer:a,style:i,target:l,testId:c,element:p,...h}=this.props,[u,m]=r?r.split("#"):["javascript:void(0)"];let f=u;a&&(f.indexOf("?")>-1?f+="&ref="+a:f+="?ref="+a),m&&(f+="#"+m);const g=[ml.link,n&&ml.highlighted];Array.isArray(i)?g.push(...i):g.push(i);const v=t?" "+t:"",y="a"===p?{href:f}:{to:f};let b=h.rel;return"_blank"!==l||b||(b="noopener noreferrer"),d.createElement(p,{"data-test-id":c,...h,...y,className:o.css(...g)+v,style:s,target:l,rel:b},e)}}C(dl,"defaultProps",{highlighted:!1,href:"javascript:void(0)",style:[],element:"a"});const ml=o.StyleSheet.create({link:{backgroundColor:"transparent",color:"inherit",textDecoration:"none",":hover":{textDecoration:"underline"}},highlighted:{textDecoration:"underline"}}),{colors:fl,typography:gl}=e.globalStyles,{Icon:vl}=e.components,yl={path:"M11 11V7a1 1 0 0 1 2 0v4h4a1 1 0 0 1 0 2h-4v4a1 1 0 0 1-2 0v-4H7a1 1 0 0 1 0-2h4zm1 13C5.373 24 0 18.627 0 12S5.373 0 12 0s12 5.373 12 12-5.373 12-12 12zm0-2c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10z",width:24,height:24},bl={path:"M12 24C5.373 24 0 18.627 0 12S5.373 0 12 0s12 5.373 12 12-5.373 12-12 12zm0-2c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10zm-5-9a1 1 0 0 1 0-2h10a1 1 0 0 1 0 2H7z",width:24,height:24},El=()=>d.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16"},d.createElement("filter",{id:"draggable-grip-shadow",width:"112.5%",height:"116.7%",x:"-6.2%",y:"-8.3%",filterUnits:"objectBoundingBox"},d.createElement("feGaussianBlur",{in:"SourceAlpha",stdDeviation:".5",result:"shadowBlurInner"}),d.createElement("feOffset",{in:"shadowBlurInner",dy:"1",result:"shadowOffsetInner"}),d.createElement("feComposite",{in:"shadowOffsetInner",in2:"SourceAlpha",k2:"-1",k3:"1",operator:"arithmetic",result:"shadowInnerInner"}),d.createElement("feColorMatrix",{in:"shadowInnerInner",values:"0 0 0 0 0.129411765 0 0 0 0 0.141176471 0 0 0 0 0.17254902 0 0 0 0.2 0"})),d.createElement("path",{d:"M1 4a1 1 0 1 1 0-2h14a1 1 0 0 1 0 2H1zm0 10a1 1 0 0 1 0-2h14a1 1 0 0 1 0 2H1zm0-5a1 1 0 1 1 0-2h14a1 1 0 0 1 0 2H1z",fill:fl.gray17,filter:"url(#draggable-grip-shadow)"})),wl=e=>{let{onClick:t}=e;return d.createElement(dl,{className:o.css(Sl.addAnswer,kl.addAnswer),onClick:t},d.createElement(vl,{icon:yl,size:24}),d.createElement("div",{className:o.css(Sl.spacer)}),"Add an answer choice")},xl=e=>{let{answer:t,onChange:n,onRemove:r}=e;return d.createElement("li",{className:o.css(Sl.answer)},d.createElement(dl,{onClick:r},d.createElement(vl,{icon:bl,size:24,color:"#D92916"})),d.createElement("div",{className:o.css(Sl.spacer)}),d.createElement(ul,{grow:1,onChange:e=>n(e.target.value),value:t}),d.createElement("div",{className:o.css(Sl.spacer)}),d.createElement(dl,{style:[Sl.disabled],title:"Answer reordering is not implemented."},d.createElement(El,null)))},Cl=e=>{let{choices:t,onChange:n}=e;return d.createElement("div",null,d.createElement("div",{className:o.css(Sl.title)},"Answer Choices"),d.createElement("ul",{className:o.css(Sl.answers)},t.map(((e,r)=>d.createElement(xl,{answer:e,key:r,onChange:e=>n([...t.slice(0,r),e,...t.slice(r+1)]),onRemove:()=>n([...t.slice(0,r),...t.slice(r+1)])})))),d.createElement(wl,{onClick:()=>n([...t,""])}))},Sl=o.StyleSheet.create({title:{...gl.bodyXsmallBold,marginBottom:6,color:fl.gray17},answers:{marginTop:12,marginBottom:12},answer:{display:"flex",flexDirection:"row",alignItems:"center",":not(:first-child)":{marginTop:12}},addAnswer:{...gl.bodyXsmallBold,display:"flex",flexDirection:"row",alignItems:"center",color:"#1865f2"},spacer:{width:16},disabled:{cursor:"not-allowed"}}),kl=o.StyleSheet.create({addAnswer:{":link":{color:"#1865f2"}}});class Nl extends d.Component{constructor(e){super(e),C(this,"focusFlag",void 0),C(this,"waitingForClick",void 0),C(this,"handleClick",(e=>{this.props.disabled||(this.props.shouldUpdate()&&(this.waitingForClick=!1),this.props.onClick&&!this.props.disabled&&this.props.onClick(e))})),C(this,"handleMouseEnter",(()=>{this.props.disabled||!this.props.shouldUpdate()||this.waitingForClick||this.setState({hovered:!0})})),C(this,"handleMouseLeave",(()=>{this.props.disabled||!this.props.shouldUpdate()||this.waitingForClick||this.setState({hovered:!1})})),C(this,"handleTouchStart",(()=>{!this.props.disabled&&this.props.shouldUpdate()&&this.setState({hovered:!0})})),C(this,"handleTouchEnd",(()=>{!this.props.disabled&&this.props.shouldUpdate()&&(this.setState({hovered:!1}),this.waitingForClick=!0)})),C(this,"handleMouseDown",(()=>{!this.props.disabled&&this.props.shouldUpdate()&&(this.setState({focused:!1}),this.focusFlag=!0)})),C(this,"handleBlur",(()=>{!this.props.disabled&&this.props.shouldUpdate()&&this.setState({focused:!1})})),C(this,"handleFocus",(()=>{!this.props.disabled&&this.props.shouldUpdate()&&(this.focusFlag?this.focusFlag=!1:this.setState({focused:!0}))})),this.state={focused:!1,hovered:e.startHovered}}render(){const e={onBlur:this.handleBlur,onClick:this.handleClick,onFocus:this.handleFocus,onMouseDown:this.handleMouseDown,onMouseEnter:this.handleMouseEnter,onMouseLeave:this.handleMouseLeave,onTouchStart:this.handleTouchStart,onTouchEnd:this.handleTouchEnd},{children:t}=this.props;return(null==t?void 0:t(this.state,e))||null}}C(Nl,"defaultProps",{startHovered:!1,shouldUpdate:()=>!0});const{borderRadius:Tl,colors:_l}=e.globalStyles;class Ol extends d.Component{render(){const{checked:e,disabled:t,appearDisabled:n,onChange:r,tabIndex:s,style:a,dataTestId:i,id:l}=this.props,c=_l.gray41;return d.createElement(Nl,null,((p,h)=>{let{focused:u}=p;return d.createElement("div",S({},h,{className:o.css(Il.container,u&&Il.focused),style:a,"data-test-id":i,"data-checked":e}),d.createElement("svg",{className:o.css(Il.svg,(t||n)&&Il.disabled),width:Dl,height:Dl,viewBox:"-".concat(Al," -").concat(Al,"\n ").concat(Dl," ").concat(Dl)},d.createElement("g",{fill:"none",fillRule:"evenodd"},e&&d.createElement("g",null,d.createElement("rect",{fill:c,width:Ml,height:Ml,x:"0",y:"0",rx:Tl}),d.createElement("path",{fill:_l.white,stroke:_l.white,d:"M4.98 7.41a0.58.58 0 1 0-0.81.81L6.47 10.53c0.23.23.59.23.81 0l4.55-4.55a0.58.58 0 0 0-0.81-0.81L6.88 9.31 4.98 7.41z"})),!e&&d.createElement("rect",{fill:_l.white,stroke:_l.gray68,width:Ml-2*Al,height:Ml-2*Al,x:Al,y:Al,rx:"4",strokeWidth:Pl}))),d.createElement("input",{type:"checkbox",id:l,checked:e,className:o.css(Il.checkbox,t&&Il.defaultCursor),disabled:t,onChange:r,tabIndex:s}))}))}}C(Ol,"defaultProps",{checked:!1,onChange:e=>{}});const Ml=16,Al=.5,Pl=1,Dl=Ml+2*Al,Il=o.StyleSheet.create({container:{position:"relative",display:"inline-block",verticalAlign:"middle",lineHeight:0,borderRadius:Tl,width:Dl,height:Dl,flexShrink:0},focused:{"::before":{content:'""',position:"absolute",top:-2,right:-2,bottom:-2,left:-2,borderRadius:Tl+2,backgroundColor:"lightblue"}},svg:{position:"absolute",left:0,top:0},checkbox:{appearance:"none",opacity:0,position:"absolute",top:Al,width:Ml,height:Ml,margin:0,outline:"none",cursor:"pointer"},disabled:{opacity:.5},defaultCursor:{cursor:"default"}}),{colors:Rl,typography:zl}=e.globalStyles,Ll=e=>{let{multipleAnswers:t,hideChoicesFromInstructions:n,onChange:r}=e;return d.createElement("div",null,d.createElement("div",{className:o.css(Fl.title)},"Behavior"),d.createElement("ul",null,d.createElement("li",{className:o.css(Fl.option)},d.createElement(Ol,{checked:t,onChange:()=>r({multipleAnswers:!t})}),d.createElement("span",{className:o.css(Fl.label)},"Allow multiple answers per marker")),d.createElement("li",{className:o.css(Fl.option)},d.createElement(Ol,{checked:n,onChange:()=>r({hideChoicesFromInstructions:!n})}),d.createElement("span",{className:o.css(Fl.label)},"Do not display answer choices in instructions"))))},Fl=o.StyleSheet.create({title:{...zl.bodyXsmallBold,marginBottom:6,color:Rl.gray17},option:{display:"flex",padding:"6px 0"},label:{...zl.smallSubheadingMobile,marginLeft:16,color:Rl.gray17}});const{Icon:Ul}=e.components,{colors:ql}=e.globalStyles;class Wl extends d.Component{constructor(){super(...arguments),C(this,"node",void 0)}handleKeyDown(e){const{onDropdownClose:t}=this.props,n=e.key,r=e.target;"ArrowDown"===n&&r.nextSibling&&(e.preventDefault(),r.nextSibling.focus()),"ArrowUp"===n&&r.previousSibling&&(e.preventDefault(),r.previousSibling.focus()),"ArrowUp"===n&&!r.previousSibling&&t&&(e.preventDefault(),t()),"Escape"!==n&&"Tab"!==n||!t||t()}render(){const{selected:e,value:t,onClick:n,children:r,optionRenderer:s,disabled:a,hideFocusState:i,testId:l,ariaLabel:c}=this.props;return d.createElement("button",{ref:e=>this.node=e,value:t,role:"menuitemradio","aria-checked":e,className:o.css(jl.notAButton,a&&jl.cursorDefault,i&&jl.noFocus),onClick:e=>{!a&&n&&n(e)},onKeyDown:e=>this.handleKeyDown(e),"aria-disabled":a,"aria-label":c,"data-test-id":l},s&&s(d.createElement(d.Fragment,null,r),t||"",e||!1,a),!s&&d.createElement("span",{className:o.css(jl.option,e&&jl.optionSelected,a&&jl.optionDisabled)},r,e&&d.createElement("span",{className:o.css(jl.check)},d.createElement(Ul,{icon:"M10,3.8C10,4,9.9,4.2,9.8,4.3L5.1,8.9L4.3,9.8C4.2,9.9,4,10,3.8,10\n S3.5,9.9,3.4,9.8L2.5,8.9L0.2,6.6C0.1,6.5,0,6.3,0,6.2s0.1-0.3,0.2-0.4\n l0.9-0.9c0.1-0.1,0.3-0.2,0.4-0.2s0.3,0.1,0.4,0.2l1.9,1.9l4.2-4.2c0.1\n -0.1,0.3-0.2,0.4-0.2c0.2,0,0.3,0.1,0.4,0.2l0.9,0.9C9.9,3.5,10,3.7,\n 10,3.8z"}))))}}class Vl extends d.Component{constructor(){super(...arguments),C(this,"focusedElement",void 0)}componentDidMount(){this.focusedElement&&(e=>{const t=E.default.findDOMNode(e);t.focus&&t.focus({preventScroll:!0})})(this.focusedElement)}render(){const{children:e,onSelected:t,selectedValues:n,optionRenderer:r,noMargin:s,onDropdownClose:a,hideFocusState:i}=this.props;return d.createElement("div",{style:{top:top},className:o.css(jl.optionGroup,s&&jl.optionGroupNoMargin)},d.Children.map(e,((e,s)=>{const o=n.includes(e.props.value),l=o||0===s?e=>this.focusedElement=e:null;return d.cloneElement(e,{...e.props,key:s,selected:o,onClick:()=>t(e.props.value),optionRenderer:r,ref:l,onDropdownClose:a,hideFocusState:i})})))}}const jl=o.StyleSheet.create({optionGroup:{margin:"4px 0"},optionGroupNoMargin:{margin:0},option:{display:"flex",flexDirection:"row",alignItems:"center",paddingLeft:32,paddingRight:32,height:30,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",color:ql.gray17,userSelect:"none",":hover":{backgroundColor:ql.gray95}},optionSelected:{backgroundColor:ql.gray95,color:"#11ACCD"},optionDisabled:{color:ql.gray76,":hover":{backgroundColor:"transparent"}},check:{position:"absolute",left:11},notAButton:{backgroundColor:"transparent",border:"none",display:"block",padding:0,margin:0,width:"100%",font:"inherit"},noFocus:{outline:"none"},cursorDefault:{cursor:"default"}}),{colors:Bl,borderRadius:$l}=e.globalStyles;class Hl extends d.Component{constructor(e){super(e),C(this,"_marker",void 0),C(this,"handleClick",(e=>{const{showDropdown:t}=this.state;this._marker===e.target?this.setState({showDropdown:!t}):t&&this._marker&&!this._marker.contains(e.target)&&(e.stopPropagation(),this.setState({showDropdown:!1}))})),C(this,"handleLabelChange",(e=>{this.updateMarker({label:e.target.value})})),C(this,"handleSelectAnswer",(e=>{let{answers:t}=this.props;t=t.includes(e)?t.filter((t=>t!==e)):[...t,e],this.updateMarker({answers:t})})),this.state={showDropdown:!1}}componentDidMount(){document.addEventListener("click",this.handleClick,!0)}UNSAFE_componentWillReceiveProps(e){const{answers:t}=this.props,n=t.filter((t=>e.choices.includes(t)));JSON.stringify(t)!==JSON.stringify(n)&&setTimeout((()=>this.updateMarker({answers:n})))}componentWillUnmount(){document.removeEventListener("click",this.handleClick,!0)}openDropdown(){this.setState({showDropdown:!0})}updateMarker(e){const{answers:t,label:n,onChange:r,x:s,y:a}=this.props;r({answers:t,label:n,x:s,y:a,...e})}render(){const{answers:e,choices:t,label:n,onRemove:r,x:s,y:a}=this.props,{showDropdown:i}=this.state;return d.createElement("div",{className:o.css(Gl.marker,e.length>0&&Gl.markerWithAnswers,i&&Gl.markerSelected),ref:e=>this._marker=e,style:{left:"".concat(s,"%"),top:"".concat(a,"%")},title:"Click to select marker answers or to delete marker. Repositioning marker is not implemented."},i&&d.createElement("div",null,d.createElement("div",{className:o.css(Gl.dropdownBody,Gl.dropdownPositionWithArrow)},d.createElement(Wl,{value:"",onClick:()=>r()},"Delete marker"),d.createElement("hr",{className:o.css(Gl.dividerHorizontal)}),d.createElement(Vl,{onSelected:this.handleSelectAnswer,selectedValues:e},t.map((e=>d.createElement(Wl,{key:e,value:e},e)))),d.createElement("div",{className:o.css(Gl.labelContainer)},d.createElement(ul,{placeholder:"ARIA label (for screen readers)",onChange:this.handleLabelChange,value:n,width:"100%"})))))}}const Gl=o.StyleSheet.create({marker:{position:"absolute",boxSizing:"content-box",width:16,height:16,marginLeft:-8,marginTop:-8,cursor:"pointer",background:"linear-gradient(to bottom, rgba(33, 36, 44, 0.2), rgba(33, 36, 44, 0.5))",border:"solid 2px #ffffff",borderRadius:16,boxShadow:"0 2px 10px 0 rgba(33, 36, 44, 0.1)"},markerSelected:{width:28,height:28,marginLeft:-12,marginTop:-12,border:"none",borderRadius:28,"::before":{content:"''",display:"block",width:20,height:20,marginLeft:2,marginTop:2,border:"solid 2px #ffffff",borderRadius:20}},markerWithAnswers:{background:"#1865f2"},dropdownPositionWithArrow:{left:46,bottom:-12,"::before":{content:"''",display:"block",position:"absolute",width:0,height:0,left:-16,bottom:8,borderRight:"solid 16px ".concat(Bl.gray98),borderTop:"solid 16px transparent",borderBottom:"solid 16px transparent"}},labelContainer:{padding:4},dividerHorizontal:{height:0,margin:0,border:"solid ".concat(Bl.gray85),borderWidth:"0 0 1px",boxShadow:"none"},dropdownBody:{position:"absolute",border:"solid 1px rgba(0, 0, 0, 0.1)",zIndex:e.globalConstants.zindexDropdown,color:Bl.gray17,backgroundColor:Bl.gray98,borderRadius:$l,maxHeight:320,cursor:"pointer"}}),{colors:Yl,typography:Kl}=e.globalStyles;class Jl extends d.Component{constructor(){super(...arguments),C(this,"_markers",[]),C(this,"handleImageDoubleClick",(e=>{e.preventDefault();const t=e.currentTarget.getBoundingClientRect(),n=Math.round((e.clientX-t.left)/t.width*1e3)/10,r=Math.round((e.clientY-t.top)/t.height*1e3)/10,{markers:s,onChange:a}=this.props;a([...s,{answers:[],label:"",x:n,y:r}])}))}openDropdownForMarkerIndices(e){e.forEach((e=>{this._markers[e]&&this._markers[e].openDropdown()}))}render(){const{choices:t,imageUrl:n,imageWidth:r,imageHeight:s,markers:a,onChange:i}=this.props,l=e.Dependencies.getDependencies().staticUrl;return d.createElement("div",null,d.createElement("div",{className:o.css(Xl.title)},"Markers"),d.createElement("div",{className:o.css(Xl.subtitle)},n?d.createElement("span",null,"Double-click on the image to add a marker.",d.createElement("br",null),d.createElement("br",null),"Markers are read by screen readers in the order that you add them here, so add in a logical order for the learner (e.g. sequentially, clockwise). You can test order by using keyboard tabbing."):"Upload an image to place markers."),n&&d.createElement("div",{className:o.css(Xl.markersCanvas),style:{maxWidth:r,maxHeight:s}},d.createElement("img",{alt:"",className:o.css(Xl.image),src:l(e.Util.getRealImageUrl(n)),onDoubleClick:this.handleImageDoubleClick}),a.map(((e,n)=>d.createElement(Hl,S({},e,{choices:t,key:"".concat(e.x,".").concat(e.y),onChange:e=>i([...a.slice(0,n),e,...a.slice(n+1)]),onRemove:()=>i([...a.slice(0,n),...a.slice(n+1)]),ref:e=>this._markers[n]=e}))))))}}const Xl=o.StyleSheet.create({title:{...Kl.bodyXsmallBold,marginBottom:6,color:Yl.gray17},subtitle:{...Kl.labelSmall,marginBottom:12,color:Yl.gray68},markersCanvas:{position:"relative",border:"solid 1px rgba(33, 36, 44, 0.16)"},image:{display:"block",maxWidth:"100%"}}),Zl="@media (max-width: 1023px)",Ql="@media (min-width: 1024px)",ec={display:"block"},tc='Lato, "Noto Sans", sans-serif',nc=o.StyleSheet.create({Title:P({},ec,{fontFamily:tc,fontWeight:900,[Ql]:{fontSize:36,lineHeight:"40px"},[Zl]:{fontSize:28,lineHeight:"32px"}}),Tagline:P({},ec,{fontFamily:tc,fontWeight:400,fontSize:20,lineHeight:"24px"}),HeadingLarge:P({},ec,{fontFamily:tc,fontWeight:700,[Ql]:{fontSize:28,lineHeight:"32px"},[Zl]:{fontSize:24,lineHeight:"28px"}}),HeadingMedium:P({},ec,{fontFamily:tc,fontWeight:700,[Ql]:{fontSize:24,lineHeight:"28px"},[Zl]:{fontSize:22,lineHeight:"26px"}}),HeadingSmall:P({},ec,{fontFamily:tc,fontWeight:700,fontSize:20,lineHeight:"24px"}),HeadingXSmall:P({},ec,{fontFamily:tc,fontWeight:700,fontSize:12,lineHeight:"16px",letterSpacing:.6,textTransform:"uppercase"}),BodySerifBlock:P({},ec,{fontFamily:'"Noto Serif", serif',fontWeight:400,fontSize:22,lineHeight:"28px"}),BodySerif:P({},ec,{fontFamily:'"Noto Serif", serif',fontWeight:400,fontSize:18,lineHeight:"22px"}),BodyMonospace:P({},ec,{fontFamily:"Inconsolata, monospace",fontWeight:400,fontSize:17,lineHeight:"22px"}),Body:P({},ec,{fontFamily:tc,fontWeight:400,fontSize:16,lineHeight:"22px"}),LabelLarge:P({},ec,{fontFamily:tc,fontWeight:700,fontSize:16,lineHeight:"20px"}),LabelMedium:P({},ec,{fontFamily:tc,fontWeight:400,fontSize:16,lineHeight:"20px"}),LabelSmall:P({},ec,{fontFamily:tc,fontWeight:400,fontSize:14,lineHeight:"18px"}),LabelXSmall:P({},ec,{fontFamily:tc,fontWeight:400,fontSize:12,lineHeight:"16px"}),Caption:P({},ec,{fontFamily:tc,fontWeight:400,fontSize:14,lineHeight:"20px"}),Footnote:P({},ec,{fontFamily:tc,fontWeight:400,fontSize:12,lineHeight:"18px"})}),rc=["style","children"];class sc extends d.Component{render(){const e=this.props,{style:t,children:n}=e,r=A(e,rc);return d.createElement(Mt,P({},r,{style:[nc.Title,t]}),n)}}sc.defaultProps={tag:"h1"};const ac=["style","children"];class ic extends d.Component{render(){const e=this.props,{style:t,children:n}=e,r=A(e,ac);return d.createElement(Mt,P({},r,{style:[nc.HeadingLarge,t]}),n)}}ic.defaultProps={tag:"h2"};const oc=["style","children"];class lc extends d.Component{render(){const e=this.props,{style:t,children:n}=e,r=A(e,oc);return d.createElement(Mt,P({},r,{style:[nc.HeadingMedium,t]}),n)}}lc.defaultProps={tag:"h3"};const cc=["style","children"];class pc extends d.Component{render(){const e=this.props,{style:t,children:n}=e,r=A(e,cc);return d.createElement(Mt,P({},r,{style:[nc.HeadingSmall,t]}),n)}}pc.defaultProps={tag:"h4"};const hc=["style","children"];class uc extends d.Component{render(){const e=this.props,{style:t,children:n}=e,r=A(e,hc);return d.createElement(Mt,P({},r,{style:[nc.HeadingXSmall,t]}),n)}}uc.defaultProps={tag:"h4"};const dc=["style","children"];class mc extends d.Component{render(){const e=this.props,{style:t,children:n}=e,r=A(e,dc);return d.createElement(Mt,P({},r,{style:[nc.BodySerifBlock,t]}),n)}}mc.defaultProps={tag:"span"};const fc=["style","children"];class gc extends d.Component{render(){const e=this.props,{style:t,children:n}=e,r=A(e,fc);return d.createElement(Mt,P({},r,{style:[nc.BodySerif,t]}),n)}}gc.defaultProps={tag:"span"};const vc=["style","children"];class yc extends d.Component{render(){const e=this.props,{style:t,children:n}=e,r=A(e,vc);return d.createElement(Mt,P({},r,{style:[nc.BodyMonospace,t]}),n)}}yc.defaultProps={tag:"span"};const bc=["style","children"];class Ec extends d.Component{render(){const e=this.props,{style:t,children:n}=e,r=A(e,bc);return d.createElement(Mt,P({},r,{style:[nc.Body,t]}),n)}}Ec.defaultProps={tag:"span"};const wc=["style","children"];class xc extends d.Component{render(){const e=this.props,{style:t,children:n}=e,r=A(e,wc);return d.createElement(Mt,P({},r,{style:[nc.LabelLarge,t]}),n)}}xc.defaultProps={tag:"span"};const Cc=["style","children"];class Sc extends d.Component{render(){const e=this.props,{style:t,children:n}=e,r=A(e,Cc);return d.createElement(Mt,P({},r,{style:[nc.LabelMedium,t]}),n)}}Sc.defaultProps={tag:"span"};const kc=["style","children"];class Nc extends d.Component{render(){const e=this.props,{style:t,children:n}=e,r=A(e,kc);return d.createElement(Mt,P({},r,{style:[nc.LabelSmall,t]}),n)}}Nc.defaultProps={tag:"span"};const Tc=["style","children"];class _c extends d.Component{render(){const e=this.props,{style:t,children:n}=e,r=A(e,Tc);return d.createElement(Mt,P({},r,{style:[nc.LabelXSmall,t]}),n)}}_c.defaultProps={tag:"span"};const Oc=["style","children"];class Mc extends d.Component{render(){const e=this.props,{style:t,children:n}=e,r=A(e,Oc);return d.createElement(Mt,P({},r,{style:[nc.Tagline,t]}),n)}}Mc.defaultProps={tag:"span"};const Ac=["style","children"];class Pc extends d.Component{render(){const e=this.props,{style:t,children:n}=e,r=A(e,Ac);return d.createElement(Mt,P({},r,{style:[nc.Caption,t]}),n)}}Pc.defaultProps={tag:"span"};const Dc=["style","children"];class Ic extends d.Component{render(){const e=this.props,{style:t,children:n}=e,r=A(e,Dc);return d.createElement(Mt,P({},r,{style:[nc.Footnote,t]}),n)}}Ic.defaultProps={tag:"span"};const Rc={xsmall:16,small:24,medium:48,large:96},zc={xsmall:"M7.237.741C7.165.393 6.95.154 6.656.053A1.01 1.01 0 0 0 6.18.01c-.053.009-.053.009-.087.017C2.553.949 0 4.214 0 7.91 0 12.36 3.598 16 8 16c4.4 0 8-3.647 8-8.112a1.02 1.02 0 0 0-.118-.423.877.877 0 0 0-.808-.48.909.909 0 0 0-.81.46c-.09.151-.13.296-.146.455-.08 3.493-2.737 6.207-6.118 6.207-3.41 0-6.118-2.74-6.118-6.196 0-2.843 1.936-5.291 4.644-6.022.1-.028.224-.082.352-.177a.928.928 0 0 0 .36-.97z",small:"M10.598.943c-.093-.449-.362-.748-.732-.875a1.314 1.314 0 0 0-.723-.033C3.83 1.417 0 6.317 0 11.864 0 18.538 5.398 24 12 24c6.598 0 12-5.471 12-12.16a1.333 1.333 0 0 0-.154-.548c-.193-.368-.544-.606-1.023-.606-.472 0-.825.229-1.035.585-.117.2-.169.39-.189.582-.124 5.472-4.294 9.73-9.599 9.73-5.349 0-9.599-4.3-9.599-9.72 0-4.46 3.036-8.299 7.28-9.444.127-.036.291-.107.458-.232.373-.28.57-.711.46-1.244z",medium:"M44.19 23.455a1.91 1.91 0 1 1 3.801 0h.003c.004.18.006.363.006.545 0 13.255-10.745 24-24 24S0 37.255 0 24 10.745 0 24 0c.182 0 .364.002.545.006V.01a1.91 1.91 0 1 1 0 3.801v.015A20.564 20.564 0 0 0 24 3.818C12.854 3.818 3.818 12.854 3.818 24c0 11.146 9.036 20.182 20.182 20.182 11.146 0 20.182-9.036 20.182-20.182 0-.182-.003-.364-.007-.545h.015z",large:"M88.38 46.91a3.818 3.818 0 1 1 7.602 0h.006c.008.362.012.725.012 1.09 0 26.51-21.49 48-48 48S0 74.51 0 48 21.49 0 48 0c.365 0 .728.004 1.09.012v.005a3.818 3.818 0 1 1 0 7.602v.032c-.362-.01-.725-.015-1.09-.015C25.708 7.636 7.636 25.708 7.636 48c0 22.292 18.072 40.364 40.364 40.364 22.292 0 40.364-18.072 40.364-40.364 0-.365-.005-.728-.015-1.09h.032z"},Lc={light:rn.white,dark:rn.offBlack16},Fc=Pt("path");class Uc extends d.Component{render(){const{size:e,light:t,style:n}=this.props,r=Rc[e],s=zc[e],a=t?Lc.light:Lc.dark,i=d.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:r,height:r,viewBox:`0 0 ${r} ${r}`},d.createElement(Fc,{style:[qc.loadingSpinner,{fill:a}],fillRule:"nonzero",d:s}));return d.createElement(Wt,{style:[qc.spinnerContainer,n]},i)}}Uc.defaultProps={size:"large",light:!1};const qc=o.StyleSheet.create({spinnerContainer:{justifyContent:"center"},loadingSpinner:{transformOrigin:"50% 50%",animationName:{"0%":{transform:"rotate(0deg)"},"50%":{transform:"rotate(180deg)"},"100%":{transform:"rotate(360deg)"}},animationDuration:"1.1s",animationIterationCount:"infinite",animationTimingFunction:"linear"}}),Wc=e=>({small:16,medium:24,large:48,xlarge:96}[e]),Vc=["color","icon","size","style"],jc=Pt("svg");class Bc extends d.PureComponent{render(){const e=this.props,{color:t,icon:n,size:r,style:s}=e,a=A(e,Vc),{assetSize:i,path:o}=((e,t)=>{if(e[t])return{assetSize:t,path:e[t]};{const n=Wc(t),r=Object.keys(e),s=e=>{const t=Wc(e)-n;return t>0?Number.POSITIVE_INFINITY:Math.abs(t)},a=r.sort(((e,t)=>s(e)-s(t))),i=a[0];if(i&&e[i])return{assetSize:i,path:e[i]};throw new Error("Icon does not contain any valid asset sizes!")}})(n,r),l=Wc(r),c=Wc(i);return d.createElement(jc,P({},a,{style:[$c.svg,s],width:l,height:l,viewBox:`0 0 ${c} ${c}`}),d.createElement("path",{fill:t,d:o}))}}Bc.defaultProps={color:"currentColor",size:"small"};const $c=o.StyleSheet.create({svg:{display:"inline-block",verticalAlign:"text-bottom",flexShrink:0,flexGrow:0}}),Hc=8,Gc=16,Yc=32,Kc=["children","skipClientNav","color","disabled","focused","hovered","href","kind","light","pressed","size","style","testId","type","spinner","icon","id","waiting"],Jc=Pt("a"),Xc=Pt("button"),Zc=Pt(yt);class Qc extends d.Component{renderInner(e){const t=this.props,{children:n,skipClientNav:r,color:s,disabled:a,focused:i,hovered:o,href:l,kind:c,light:p,pressed:h,size:u,style:m,testId:f,type:g,spinner:v,icon:y,id:b}=t,E=A(t,Kc),w=np("destructive"===s?sn.controlDestructive:sn.controlDefault,c,p,y?8+("small"===u?16:24):0,u),x=v||a,C=P({"data-test-id":f,id:b,role:"button",style:[[ep.shared,x&&ep.disabled,y&&ep.withIcon,w.default,x&&w.disabled,"tertiary"!==c&&!x&&(h?w.active:(o||i)&&w.focus),"small"===u&&ep.small,"xlarge"===u&&ep.xlarge],m]},E),S="small"===u?Nc:xc,k=d.createElement(S,{style:[ep.text,"xlarge"===u&&ep.xlargeText,y&&ep.textWithIcon,v&&ep.hiddenText,"tertiary"===c&&ep.textWithFocus,"tertiary"===c&&!x&&(h?w.active:(o||i)&&w.focus)]},y&&d.createElement(Bc,{size:u,color:"currentColor",icon:y,style:ep.icon}),n),N=d.createElement(d.Fragment,null,k,v&&d.createElement(Uc,{style:ep.spinner,size:{medium:"small",small:"xsmall",xlarge:"medium"}[u],light:"primary"===c}));return l&&!x?e&&!r&&un(l)?d.createElement(Zc,P({},C,{to:l}),N):d.createElement(Jc,P({},C,{href:l}),N):d.createElement(Xc,P({type:g||"button"},C,{"aria-disabled":x}),N)}render(){return d.createElement(Be.Consumer,null,(e=>this.renderInner(e)))}}const ep=o.StyleSheet.create({shared:{position:"relative",display:"inline-flex",alignItems:"center",justifyContent:"center",height:40,paddingTop:0,paddingBottom:0,paddingLeft:16,paddingRight:16,border:"none",borderRadius:4,cursor:"pointer",outline:"none",textDecoration:"none",boxSizing:"border-box",touchAction:"manipulation",userSelect:"none",":focus":{WebkitTapHighlightColor:"rgba(0,0,0,0)"}},withIcon:{paddingLeft:12},disabled:{cursor:"auto"},small:{height:32},xlarge:{height:60},text:{alignItems:"center",fontWeight:"bold",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",display:"inline-block",pointerEvents:"none"},xlargeText:{fontSize:18,lineHeight:"20px"},textWithIcon:{display:"flex"},textWithFocus:{position:"relative"},hiddenText:{visibility:"hidden"},spinner:{position:"absolute"},icon:{paddingRight:Hc}}),tp={},np=(e,t,n,r,s)=>{const a=e+t+n.toString()+r.toString()+s;if(tp[a])return tp[a];const{white:i,white50:l,white64:c,offBlack32:p,offBlack50:h,darkBlue:u}=rn,d=nn(tn(e,.32),i),m=nn(p,e),f="xlarge"===s?Yc:Gc;let g={};if("primary"===t)g={default:{background:n?i:e,color:n?e:i,paddingLeft:f,paddingRight:f},focus:{boxShadow:`0 0 0 1px ${n?u:i}, 0 0 0 3px ${n?i:e}`},active:{boxShadow:`0 0 0 1px ${n?u:i}, 0 0 0 3px ${n?d:m}`,background:n?d:m,color:n?m:d},disabled:{background:n?d:p,color:n?e:c,cursor:"default",":focus":{boxShadow:`0 0 0 1px ${n?p:i}, 0 0 0 3px ${n?d:p}`}}};else if("secondary"===t)g={default:{background:"none",color:n?i:e,borderColor:n?l:h,borderStyle:"solid",borderWidth:1,paddingLeft:r?f-4:f,paddingRight:f},focus:{background:n?"transparent":i,borderColor:n?i:e,borderWidth:2,paddingLeft:r?f-5:f-1,paddingRight:f-1},active:{background:n?m:d,color:n?d:m,borderColor:n?d:m,borderWidth:2,paddingLeft:r?f-5:f-1,paddingRight:f-1},disabled:{color:n?l:p,borderColor:n?d:p,cursor:"default",":focus":{borderColor:n?l:p,borderWidth:2,paddingLeft:r?f-5:f-1,paddingRight:f-1}}};else{if("tertiary"!==t)throw new Error("Button kind not recognized");g={default:{background:"none",color:n?i:e,paddingLeft:0,paddingRight:0},focus:{":after":{content:"''",position:"absolute",height:2,width:`calc(100% - ${r}px)`,right:0,bottom:0,background:n?i:e,borderRadius:2}},active:{color:n?d:m,":after":{content:"''",position:"absolute",height:2,width:`calc(100% - ${r}px)`,right:0,bottom:"calc(50% - 11px)",background:n?d:m,borderRadius:2}},disabled:{color:n?d:p,cursor:"default"}}}return tp[a]=o.StyleSheet.create(g),tp[a]},rp=["href","type","children","skipClientNav","spinner","disabled","onClick","beforeNav","safeWithNav","tabIndex","target","rel"],sp=["tabIndex"];class ap extends d.Component{renderClickableBehavior(e){const t=this.props,{href:n,type:r,children:s,skipClientNav:a,spinner:i,disabled:o,onClick:l,beforeNav:c,safeWithNav:p,tabIndex:h,target:u,rel:m}=t,f=A(t,rp),g=mn(n,a,e),v=(e,t)=>{let{tabIndex:l}=t,c=A(t,sp);return d.createElement(Qc,P({},f,e,c,{disabled:o,spinner:i||e.waiting,skipClientNav:a,href:n,target:u,type:r,tabIndex:h||l}),s)};return c?d.createElement(g,{disabled:i||o,href:n,role:"button",type:r,onClick:l,beforeNav:c,safeWithNav:p,rel:m},v):d.createElement(g,{disabled:i||o,href:n,role:"button",type:r,onClick:l,safeWithNav:p,target:u,rel:m},v)}render(){return d.createElement(Be.Consumer,null,(e=>this.renderClickableBehavior(e)))}}ap.defaultProps={color:"default",kind:"primary",light:!1,size:"medium",disabled:!1,spinner:!1};const{colors:ip,typography:op}=e.globalStyles,lp=e=>{let{onChange:t,url:n}=e;return d.createElement("div",null,d.createElement("div",{className:o.css(cp.title)},"Image"),d.createElement("div",{className:o.css(cp.components)},d.createElement(ul,{placeholder:"URL",grow:1,onChange:e=>t(e.target.value),value:n}),d.createElement("div",{className:o.css(cp.spacer)}),d.createElement(ap,{disabled:!n,"aria-label":n?"":"Not implemented. Use the 'Add Image' button in the editor to upload image, then copy the URL here.",onClick:()=>t(""),style:cp.btn},n?"Remove":"Upload")))},cp=o.StyleSheet.create({title:{...op.bodyXsmallBold,marginBottom:6,color:ip.gray17},components:{display:"flex"},spacer:{width:16},btn:{minWidth:90}});class pp extends d.Component{constructor(){super(...arguments),C(this,"_questionMarkers",void 0),C(this,"getSaveWarnings",(()=>{const{choices:e,imageAlt:t,imageUrl:n,markers:r}=this.props,s=[];if(e.length<2&&s.push("Question requires at least two answer choices"),n?t||s.push("Question image has no alt text"):s.push("Image is not specified for question"),r.length){let e=0,t=0;for(const n of r)n.answers.length||e++,n.label||t++;e&&s.push("Question has ".concat(e," markers with no ")+"answers selected"),t&&s.push("Question has ".concat(t," markers with no ")+"ARIA label")}else s.push("Question has no markers, to label answers on image");return s})),C(this,"handleImageChange",(t=>{this.props.onChange({imageUrl:t,imageWidth:0,imageHeight:0}),t&&e.Util.getImageSize(t,((e,t)=>{this.props.onChange({imageWidth:e,imageHeight:t})}))})),C(this,"handleAltChange",(e=>{this.props.onChange({imageAlt:e})})),C(this,"handleChoicesChange",(e=>{this.props.onChange({choices:e})})),C(this,"handleMarkersChange",(e=>{this.props.onChange({markers:e})})),C(this,"handleBehaviorChange",(e=>{this.props.onChange(e)}))}componentDidUpdate(e){const t={};e.markers.forEach((e=>t["".concat(e.x,".").concat(e.y)]=e));const n=this.props.markers.map(((e,n)=>t.hasOwnProperty("".concat(e.x,".").concat(e.y))?-1:n)).filter((e=>-1!==e));n.length&&this._questionMarkers&&this._questionMarkers.openDropdownForMarkerIndices(n)}serialize(){return e.EditorJsonify.serialize.call(this)}render(){const{choices:e,imageAlt:t,imageUrl:n,imageWidth:r,imageHeight:s,markers:a,multipleAnswers:i,hideChoicesFromInstructions:l}=this.props,c=n&&r>0&&s>0;return d.createElement("div",null,d.createElement(lp,{onChange:this.handleImageChange,url:n}),d.createElement("div",{className:o.css(hp.smallSpacer)}),c&&d.createElement(ul,{placeholder:"Alt text (for screen readers)",onChange:e=>this.handleAltChange(e.target.value),value:t,width:"100%"}),d.createElement("div",{className:o.css(hp.largeSpacer)}),d.createElement(Jl,{choices:e,imageUrl:c?n:"",imageWidth:r,imageHeight:s,markers:a,onChange:this.handleMarkersChange,ref:e=>this._questionMarkers=e}),d.createElement("div",{className:o.css(hp.largeSpacer)}),d.createElement(Cl,{choices:e,onChange:this.handleChoicesChange}),d.createElement("div",{className:o.css(hp.largeSpacer)}),d.createElement(Ll,{multipleAnswers:i,hideChoicesFromInstructions:l,onChange:this.handleBehaviorChange}))}}C(pp,"defaultProps",{choices:[],imageAlt:"",imageUrl:"",imageWidth:0,imageHeight:0,markers:[],multipleAnswers:!1,hideChoicesFromInstructions:!1}),C(pp,"widgetName","label-image");const hp=o.StyleSheet.create({largeSpacer:{height:32},smallSpacer:{height:16}}),{InfoTip:up,NumberInput:dp,PropCheckBox:mp}=e.components,fp={display:"table",tableLayout:"fixed"},gp={display:"table-row"},vp={display:"table-cell",padding:5},yp={borderRadius:10,cursor:"pointer"},bp={plus:()=>[[!1,!0,!1],[!0,!0,!0],[!1,!0,!1]],x:()=>[[!0,!1,!0],[!1,!0,!1],[!0,!1,!0]],"plus/x":e=>e%2?bp.x():bp.plus()},Ep=function(e,t,n){return e=Math.floor(e),e=Math.max(e,t),e=Math.min(e,n)};class wp extends d.Component{constructor(){super(...arguments),C(this,"_flip",(()=>{this.props.onChange(!this.props.value)}))}render(){const e=this.props.value?"#55dd55":"#115511",t=f.default.extend({},yp,{width:this.props.size,height:this.props.size,backgroundColor:e});return d.createElement("div",{style:t,onClick:this._flip})}}C(wp,"propTypes",{value:g.default.bool.isRequired,size:g.default.number.isRequired});class xp extends d.Component{render(){return d.createElement("div",{style:fp,className:"no-select"},f.default.map(this.props.cells,((e,t)=>d.createElement("div",{key:t,style:gp},f.default.map(e,((e,n)=>d.createElement("div",{key:n,style:vp},d.createElement(wp,{value:e,size:this.props.size,onChange:f.default.partial(this.props.onChange,t,n)}))))))))}}C(xp,"propTypes",{cells:g.default.arrayOf(g.default.arrayOf(g.default.bool)).isRequired,size:g.default.number.isRequired});class Cp extends d.Component{constructor(){var t;super(...arguments),t=this,C(this,"_height",(()=>this.props.startCells.length)),C(this,"_width",(()=>0!==this.props.startCells.length?this.props.startCells[0].length:0)),C(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),C(this,"_handlePatternChange",(e=>{this.change("flipPattern",e.target.value)})),C(this,"_changeWidth",(e=>{e=Ep(e,1,8),this._truncateCells(e,this._height())})),C(this,"_changeHeight",(e=>{e=Ep(e,1,8),this._truncateCells(this._width(),e)})),C(this,"_truncateCells",((e,t)=>{const n=f.default.times(t,(t=>f.default.times(e,(e=>!(!this.props.startCells[t]||!this.props.startCells[t][e])))));this.change({startCells:n})})),C(this,"_switchTile",((e,t)=>{const n=(r=this.props.startCells,s=(n,r)=>n===e&&r===t,f.default.map(r,((e,t)=>f.default.map(e,((e,n)=>s(t,n)?!e:e)))));var r,s;this.change({startCells:n})})),C(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){return d.createElement("div",null,d.createElement("div",null,"Width:",d.createElement(dp,{value:this._width(),placeholder:5,onChange:this._changeWidth}),", ","Height:",d.createElement(dp,{value:this._height(),placeholder:5,onChange:this._changeHeight})),d.createElement("div",null,"Flip pattern:",d.createElement("select",{value:this.props.flipPattern,onChange:this._handlePatternChange},f.default.map(f.default.keys(bp),((e,t)=>d.createElement("option",{value:e,key:t},e))))),d.createElement("div",null,"Grade incomplete puzzles as wrong:"," ",d.createElement(mp,{gradeIncompleteAsWrong:this.props.gradeIncompleteAsWrong,onChange:this.props.onChange}),d.createElement(up,null,"By default, incomplete puzzles are graded as empty.")),d.createElement("div",null,"Starting configuration:"),d.createElement("div",{style:{overflowX:"auto"}},d.createElement(xp,{cells:this.props.startCells,size:50,onChange:this._switchTile})))}}C(Cp,"propTypes",{...e.Changeable.propTypes,startCells:g.default.arrayOf(g.default.arrayOf(g.default.bool)),flipPattern:g.default.string.isRequired,gradeIncompleteAsWrong:g.default.bool.isRequired}),C(Cp,"widgetName","lights-puzzle"),C(Cp,"defaultProps",{startCells:[[!1,!1,!1],[!1,!1,!1],[!1,!1,!1]],flipPattern:"plus",gradeIncompleteAsWrong:!1});const{InfoTip:Sp,PropCheckBox:kp,TextListEditor:Np}=e.components;class Tp extends d.Component{constructor(){super(...arguments),C(this,"onLabelChange",((e,t)=>{const n=f.default.clone(this.props.labels);n[e]=t.target.value,this.props.onChange({labels:n})})),C(this,"getSaveWarnings",(()=>this.props.left.length!==this.props.right.length?["The two halves of the matcher have different numbers of cards."]:[])),C(this,"serialize",(()=>f.default.pick(this.props,"left","right","labels","orderMatters","padding")))}render(){return d.createElement("div",{className:"perseus-matcher-editor"},d.createElement("div",null," ","Correct answer:"," ",d.createElement(Sp,null,d.createElement("p",null,"Enter the correct answers here. The preview on the right will show the cards in a randomized order, which is how the student will see them."))),d.createElement("div",{className:"perseus-clearfix"},d.createElement(Np,{options:this.props.left,onChange:(e,t)=>{this.props.onChange({left:e},t)},layout:"vertical"}),d.createElement(Np,{options:this.props.right,onChange:(e,t)=>{this.props.onChange({right:e},t)},layout:"vertical"})),d.createElement("span",null," ","Labels:"," ",d.createElement(Sp,null,d.createElement("p",null,"These are entirely optional."))),d.createElement("div",null,d.createElement("input",{type:"text",defaultValue:this.props.labels[0],onChange:this.onLabelChange.bind(this,0)}),d.createElement("input",{type:"text",defaultValue:this.props.labels[1],onChange:this.onLabelChange.bind(this,1)})),d.createElement("div",null,d.createElement(kp,{label:"Order of the matched pairs matters:",orderMatters:this.props.orderMatters,onChange:this.props.onChange}),d.createElement(Sp,null,d.createElement("p",null,"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."),d.createElement("p",null,"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."))),d.createElement("div",null,d.createElement(kp,{label:"Padding:",padding:this.props.padding,onChange:this.props.onChange}),d.createElement(Sp,null,d.createElement("p",null,"Padding is good for text, but not needed for images."))))}}C(Tp,"propTypes",{left:g.default.array,right:g.default.array,labels:g.default.array,orderMatters:g.default.bool,padding:g.default.bool}),C(Tp,"widgetName","matcher"),C(Tp,"defaultProps",{left:["$x$","$y$","$z$"],right:["$1$","$2$","$3$"],labels:["test","label"],orderMatters:!1,padding:!0});const{RangeInput:_p}=e.components,Op=e.MatrixWidget.widget;class Mp extends d.Component{constructor(){var t;super(...arguments),t=this,C(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),C(this,"onMatrixBoardSizeChange",(e=>{const t=function(e){const t=[1,1];return f.default(e).each(((e,n)=>{let r=0;f.default(e).each(((e,t)=>{null!=e&&e.toString().length&&(r=t+1)})),t[1]=Math.max(t[1],r),r>0&&(t[0]=Math.max(t[0],n+1))})),t}(this.props.answers);if(null!==e[0]&&null!==e[1]){e=[Math.round(Math.min(Math.max(e[0],1),6)),Math.round(Math.min(Math.max(e[1],1),6))];const n=f.default(Math.min(e[0],t[0])).times((n=>f.default(Math.min(e[1],t[1])).times((e=>this.props.answers[n][e]))));this.props.onChange({matrixBoardSize:e,answers:n})}})),C(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){const e=f.default.extend({numericInput:!0,onBlur:()=>{},onFocus:()=>{},trackInteraction:()=>{}},this.props);return d.createElement("div",{className:"perseus-matrix-editor"},d.createElement("div",{className:"perseus-widget-row"}," ","Max matrix size:"," ",d.createElement(_p,{value:this.props.matrixBoardSize,onChange:this.onMatrixBoardSizeChange,format:this.props.labelStyle,useArrowKeys:!0})),d.createElement("div",{className:"perseus-widget-row"},d.createElement(Op,e)),d.createElement("div",{className:"perseus-widget-row"}," ","Matrix prefix:"," ",d.createElement(Un,{ref:"prefix",apiOptions:this.props.apiOptions,content:this.props.prefix,widgetEnabled:!1,onChange:e=>{this.change({prefix:e.content})}})),d.createElement("div",{className:"perseus-widget-row"}," ","Matrix suffix:"," ",d.createElement(Un,{ref:"suffix",apiOptions:this.props.apiOptions,content:this.props.suffix,widgetEnabled:!1,onChange:e=>{this.change({suffix:e.content})}})))}}C(Mp,"propTypes",{...e.Changeable.propTypes,matrixBoardSize:g.default.arrayOf(g.default.number).isRequired,answers:g.default.arrayOf(g.default.arrayOf(g.default.number)),prefix:g.default.string,suffix:g.default.string,cursorPosition:g.default.arrayOf(g.default.number)}),C(Mp,"widgetName","matrix"),C(Mp,"defaultProps",{matrixBoardSize:[3,3],answers:[[]],prefix:"",suffix:"",cursorPosition:[0,0]});const{InfoTip:Ap,NumberInput:Pp,PropCheckBox:Dp,RangeInput:Ip}=e.components,Rp={url:null,top:0,left:0};class zp extends d.Component{constructor(){var t;super(...arguments),t=this,C(this,"className","perseus-widget-measurer"),C(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),C(this,"_changeUrl",(e=>{this._changeImage("url",e.target.value)})),C(this,"_changeTop",(e=>{this._changeImage("top",e)})),C(this,"_changeLeft",(e=>{this._changeImage("left",e)})),C(this,"_changeImage",((e,t)=>{const n=f.default.clone(this.props.image);n[e]=t,this.change("image",n)})),C(this,"renderLabelChoices",(e=>f.default.map(e,(function(e){const[t,n]=e;return d.createElement("option",{key:n,value:n},t)})))),C(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){const e=f.default.extend({},Rp,this.props.image);return d.createElement("div",{className:"perseus-widget-measurer"},d.createElement("div",null,"Image displayed under protractor and/or ruler:"),d.createElement("div",null,"URL:"," ",d.createElement("input",{type:"text",className:"perseus-widget-measurer-url",ref:"image-url",defaultValue:e.url,onChange:this._changeUrl}),d.createElement(Ap,null,d.createElement("p",null,'Create an image in graphie, or use the "Add image" function to create a background.'))),e.url&&d.createElement("div",{className:"perseus-widget-row"},d.createElement("label",{className:"perseus-widget-left-col"},"Pixels from top:"," ",d.createElement(Pp,{placeholder:0,onChange:this._changeTop,value:e.top,useArrowKeys:!0})),d.createElement("label",{className:"perseus-widget-right-col"},"Pixels from left:"," ",d.createElement(Pp,{placeholder:0,onChange:this._changeLeft,value:e.left,useArrowKeys:!0}))),d.createElement("div",null,"Containing area [width, height]:"," ",d.createElement(Ip,{onChange:this.change("box"),value:this.props.box,useArrowKeys:!0})),d.createElement("div",{className:"perseus-widget-row"},d.createElement("div",{className:"perseus-widget-left-col"},d.createElement(Dp,{label:"Show ruler",showRuler:this.props.showRuler,onChange:this.props.onChange})),d.createElement("div",{className:"perseus-widget-right-col"},d.createElement(Dp,{label:"Show protractor",showProtractor:this.props.showProtractor,onChange:this.props.onChange}))),this.props.showRuler&&d.createElement("div",null,d.createElement("div",null,d.createElement("label",null," ","Ruler label:"," ",d.createElement("select",{onChange:e=>this.change("rulerLabel",e.target.value),value:this.props.rulerLabel},d.createElement("option",{value:""},"None"),d.createElement("optgroup",{label:"Metric"},this.renderLabelChoices([["milimeters","mm"],["centimeters","cm"],["meters","m"],["kilometers","km"]])),d.createElement("optgroup",{label:"Imperial"},this.renderLabelChoices([["inches","in"],["feet","ft"],["yards","yd"],["miles","mi"]]))))),d.createElement("div",null,d.createElement("label",null," ","Ruler ticks:"," ",d.createElement("select",{onChange:e=>this.change("rulerTicks",+e.target.value),value:this.props.rulerTicks},f.default.map([1,2,4,8,10,16],(function(e){return d.createElement("option",{key:e,value:e},e)}))))),d.createElement("div",null,d.createElement("label",null,"Ruler pixels per unit:"," ",d.createElement(Pp,{placeholder:40,onChange:this.change("rulerPixels"),value:this.props.rulerPixels,useArrowKeys:!0}))),d.createElement("div",null,d.createElement("label",null,"Ruler length in units:"," ",d.createElement(Pp,{placeholder:10,onChange:this.change("rulerLength"),value:this.props.rulerLength,useArrowKeys:!0})))))}}C(zp,"widgetName","measurer"),C(zp,"propTypes",{...e.Changeable.propTypes,box:g.default.arrayOf(g.default.number),image:g.default.shape({url:g.default.string,top:g.default.number,left:g.default.number}),showProtractor:g.default.bool,showRuler:g.default.bool,rulerLabel:g.default.string,rulerTicks:g.default.number,rulerPixels:g.default.number,rulerLength:g.default.number}),C(zp,"defaultProps",{box:[480,480],image:{},showProtractor:!0,showRuler:!1,rulerLabel:"",rulerTicks:10,rulerPixels:40,rulerLength:10});const{NumberInput:Lp,TextInput:Fp}=e.components;class Up extends d.Component{constructor(){var t;super(...arguments),t=this,C(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),C(this,"updateMolecule",(e=>{this.change({smiles:e})})),C(this,"updateRotation",(e=>{this.change({rotationAngle:e})})),C(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){return d.createElement("div",null,d.createElement("div",null,d.createElement("label",null,"SMILES: ",d.createElement(Fp,{onChange:this.updateMolecule,value:this.props.smiles}))),d.createElement("div",null,d.createElement("label",null,"Rotation (deg): ",d.createElement(Lp,{onChange:this.updateRotation,value:this.props.rotationAngle}))))}}C(Up,"propTypes",{...e.Changeable.propTypes,rotationAngle:g.default.number,smiles:g.default.string}),C(Up,"widgetName","molecule-renderer");const{ButtonGroup:qp,InfoTip:Wp,NumberInput:Vp,PropCheckBox:jp,RangeInput:Bp}=e.components;class $p extends d.Component{constructor(){super(...arguments),C(this,"onRangeChange",(e=>{this.props.onChange({range:e})})),C(this,"onLabelRangeChange",((e,t)=>{let n=this.props.labelRange.slice();const r=n[1-e];null==t||null==r?n[e]=t:n=[Math.min(t,r),Math.max(t,r)],this.props.onChange({labelRange:n})})),C(this,"onDivisionRangeChange",(e=>{let t=this.props.numDivisions;t=((e,t,n)=>Math.min(Math.max(e,t),n))(t,e[0],e[1]),this.props.onChange({divisionRange:e,numDivisions:t})})),C(this,"onNumChange",((e,t)=>{const n={};n[e]=t,this.props.onChange(n)})),C(this,"onNumDivisionsChange",(e=>{const t=this.props.divisionRange.slice();(e=(e=f.default.isFinite(e)?Math.round(e):0)<0?-1*e:e)&&(e=Math.min(t[1],Math.max(t[0],e)),this.props.onChange({tickStep:null,divisionRange:t,numDivisions:e}))})),C(this,"onTickStepChange",(e=>{this.props.onChange({numDivisions:null,tickStep:e})})),C(this,"onChangeRelation",(e=>{const t=e.target.value;this.props.onChange({correctRel:t,isInequality:"eq"!==t})})),C(this,"onLabelStyleChange",(e=>{this.props.onChange({labelStyle:e})})),C(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){const e=this.props.range,t=this.props.labelRange,n=this.props.divisionRange;e[0]=+e[0],e[1]=+e[1];const r=e[1]-e[0],s=this.props.numDivisions,a=this.props.snapDivisions,i=this.props.tickStep,o=this.props.isTickCtrl;let l;l=o?null:i?i/a:r/s/a;return d.createElement("div",{className:"perseus-widget-number-line-editor"},d.createElement("div",{className:"perseus-widget-row"},"Correct x"," ",d.createElement("select",{value:this.props.correctRel,onChange:this.onChangeRelation},d.createElement("option",{value:"eq"}," = "),d.createElement("option",{value:"lt"}," < "),d.createElement("option",{value:"gt"}," > "),d.createElement("option",{value:"le"}," ≤ "),d.createElement("option",{value:"ge"}," ≥ "))," ",d.createElement(Vp,{value:this.props.correctX,format:this.props.labelStyle,onChange:this.onNumChange.bind(this,"correctX"),checkValidity:t=>t>=e[0]&&t<=e[1]&&(!l||sa.isInteger((t-e[0])/l)),placeholder:"answer",size:"normal",useArrowKeys:!0}),d.createElement(Wp,null,d.createElement("p",null,"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 (=, <, >, ≤, ≥)."))),d.createElement("div",{className:"perseus-widget-row"},this.props.static?d.createElement("label",null,"Range:"):d.createElement("label",null,"Position:"," ",d.createElement(Vp,{value:this.props.initialX,format:this.props.labelStyle,onChange:this.onNumChange.bind(this,"initialX"),placeholder:e[0],checkValidity:t=>t>=e[0]&&t<=e[1],useArrowKeys:!0})," ∈ "),d.createElement(Bp,{value:e,onChange:this.onRangeChange,format:this.props.labelStyle,useArrowKeys:!0}),d.createElement(Wp,null,d.createElement("p",null,"This controls the initial position of the point along the number line and the",d.createElement("strong",null,"range"),", the position of the endpoints of the number line. Setting the range constrains the position of the answer and the labels."),d.createElement("p",null,"In static mode, the initial position of the point is determined by Correct x instead of position."))),d.createElement("div",{className:"perseus-widget-row"},d.createElement("div",{className:"perseus-widget-left-col"},"Labels:"," ",d.createElement(Vp,{value:t[0],placeholder:e[0],format:this.props.labelStyle,checkValidity:t=>t>=e[0]&&t<=e[1],onChange:this.onLabelRangeChange.bind(this,0),useArrowKeys:!0}),d.createElement("span",null," & "),d.createElement(Vp,{value:t[1],placeholder:e[1],format:this.props.labelStyle,checkValidity:t=>t>=e[0]&&t<=e[1],onChange:this.onLabelRangeChange.bind(this,1),useArrowKeys:!0}),d.createElement(Wp,null,d.createElement("p",null,"This controls the position of the left / right labels. By default, the labels are set by the range ",d.createElement("br",null),d.createElement("strong",null,"Note:")," Ensure that the labels line up with the tick marks, or it may be confusing for users.")))),d.createElement("div",{className:"perseus-widget-row"},"Style:"," ",d.createElement(qp,{allowEmpty:!1,value:this.props.labelStyle,buttons:[{value:"decimal",content:"0.75",title:"Decimals"},{value:"improper",content:"⁷⁄₄",title:"Improper fractions"},{value:"mixed",content:"1¾",title:"Mixed numbers"},{value:"non-reduced",content:"⁸⁄₄",title:"Non-reduced"}],onChange:this.onLabelStyleChange}),d.createElement(Wp,null,d.createElement("p",null,"This controls the styling of the labels for the two main labels as well as all the tick mark labels, if applicable. Your choices are decimal, improper fractions, mixed fractions, and non-reduced fractions."))),d.createElement("div",{className:"perseus-widget-row"},!this.props.static&&d.createElement("div",{className:"perseus-widget-left-col"},d.createElement(jp,{label:"Show tick controller",isTickCtrl:this.props.isTickCtrl,onChange:this.props.onChange})),d.createElement("div",{className:"perseus-widget-right-col"},d.createElement(jp,{label:"Show label ticks",labelTicks:this.props.labelTicks,onChange:this.props.onChange}))),d.createElement("div",{className:"perseus-widget-row"},!this.props.static&&d.createElement(jp,{label:"Show tooltips",showTooltips:this.props.showTooltips,onChange:this.props.onChange})),d.createElement("div",{className:"perseus-widget-row"},o&&d.createElement("span",null,d.createElement("label",null,"Start num divisions at"," ",d.createElement(Vp,{value:this.props.numDivisions||null,format:"decimal",onChange:this.onNumDivisionsChange,checkValidity:e=>e>=n[0]&&e<=n[1],placeholder:r/this.props.tickStep,useArrowKeys:!0})),d.createElement(Wp,null,d.createElement("p",null,"This controls the number (and position) of the tick marks. The number of divisions is constrained to"," "+n[0]+"–"+n[1],".",d.createElement("br",null),d.createElement("strong",null,"Note:")," The user will be able to specify the number of divisions in a number input."))),!o&&d.createElement("span",null,d.createElement("label",null,"Num divisions:"," ",d.createElement(Vp,{value:this.props.numDivisions||null,format:"decimal",onChange:this.onNumDivisionsChange,checkValidity:e=>e>=n[0]&&e<=n[1],placeholder:r/this.props.tickStep,useArrowKeys:!0}))," ",d.createElement("label",null,"or tick step:"," ",d.createElement(Vp,{value:this.props.tickStep||null,format:this.props.labelStyle,onChange:this.onTickStepChange,checkValidity:e=>e>0&&e<=r,placeholder:r/this.props.numDivisions,useArrowKeys:!0})),d.createElement(Wp,null,d.createElement("p",null,"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."," ",d.createElement("br",null),d.createElement("strong",null,"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.")))),d.createElement("div",{className:"perseus-widget-row"},d.createElement("label",null,"Snap increments per tick:"," ",d.createElement(Vp,{value:a,checkValidity:e=>e>0,format:this.props.labelStyle,onChange:this.onNumChange.bind(this,"snapDivisions"),useArrowKeys:!0})),d.createElement(Wp,null,d.createElement("p",null,"This determines the number of different places the point will snap between two adjacent tick marks."," ",d.createElement("br",null),d.createElement("strong",null,"Note:"),"Ensure the required number of snap increments is provided to answer the question."))))}}C($p,"propTypes",{range:g.default.arrayOf(g.default.number).isRequired,labelRange:g.default.arrayOf(g.default.number).isRequired,labelStyle:g.default.string.isRequired,labelTicks:g.default.bool,divisionRange:g.default.arrayOf(g.default.number).isRequired,numDivisions:g.default.number.isRequired,snapDivisions:g.default.number,tickStep:g.default.number,correctRel:g.default.oneOf(["lt","gt","le","ge","eq"]),correctX:g.default.number,initialX:g.default.number,isTickCtrl:g.default.bool,onChange:g.default.func.isRequired,static:g.default.bool,showTooltips:g.default.bool}),C($p,"widgetName","number-line"),C($p,"defaultProps",{range:[0,10],labelRange:[null,null],labelStyle:"decimal",labelTicks:!0,divisionRange:[1,12],numDivisions:5,snapDivisions:2,tickStep:null,correctRel:"eq",correctX:null,initialX:null,showTooltips:!1});const{ButtonGroup:Hp,InfoTip:Gp,InlineIcon:Yp,MultiButtonGroup:Kp,NumberInput:Jp,PropCheckBox:Xp,TextInput:Zp}=e.components,{iconGear:Qp,iconTrash:eh}=e.icons,{firstNumericalParse:th}=e.Util,nh=[{title:"Integers",value:"integer",content:"6"},{title:"Decimals",value:"decimal",content:"0.75"},{title:"Proper fractions",value:"proper",content:"⅗"},{title:"Improper fractions",value:"improper",content:"⁷⁄₄"},{title:"Mixed numbers",value:"mixed",content:"1¾"},{title:"Numbers with π",value:"pi",content:"π"}],rh=e=>({value:null,status:e,message:"",simplify:"required",answerForms:[],strict:!1,maxError:null}),sh=v.default({displayName:"NumericInputEditor",propTypes:{...e.Changeable.propTypes},statics:{widgetName:"numeric-input"},getDefaultProps:function(){return{answers:[rh("correct")],size:"normal",coefficient:!1,labelText:"",multipleNumberInput:!1,rightAlign:!1}},getInitialState:function(){return{lastStatus:"wrong",showOptions:f.default.map(this.props.answers,(()=>!1))}},render:function(){const e=this.props.answers,t=t=>d.createElement("div",{className:"perseus-widget-row"},d.createElement("label",null,"Unsimplified answers are"),d.createElement(Hp,{value:e[t].simplify,allowEmpty:!1,buttons:[{value:"required",content:"ungraded"},{value:"optional",content:"accepted"},{value:"enforced",content:"wrong"}],onChange:this.updateAnswer(t,"simplify")}),d.createElement(Gp,null,d.createElement("p",null,'Normally select "ungraded". This will give the user a message saying the answer is correct but not simplified. The user will then have to simplify it and re-enter, but will not be penalized. (5th grade and after)'),d.createElement("p",null,'Select "accepted" only if the user is not expected to know how to simplify fractions yet. (Anything prior to 5th grade)'),d.createElement("p",null,'Select "wrong" ',d.createElement("em",null,"only")," if we are specifically assessing the ability to simplify."))),n=t=>d.createElement("div",null,d.createElement("div",{className:"perseus-widget-row"},d.createElement("label",null,"Choose the suggested answer formats"),d.createElement(Kp,{buttons:nh,values:e[t].answerForms,onChange:this.updateAnswer(t,"answerForms")}),d.createElement(Gp,null,d.createElement("p",null,'Formats will be autoselected for you based on the given answer; to show no suggested formats and accept all types, simply have a decimal/integer be the answer. Values with π will have format "pi", and values that are fractions will have some subset (mixed will be "mixed" and "proper"; improper/proper will both be "improper" and "proper"). If you would like to specify that it is only a proper fraction (or only a mixed/improper fraction), deselect the other format. Except for specific cases, you should not need to change the autoselected formats.'),d.createElement("p",null,"To restrict the answer to ",d.createElement("em",null,"only"),' an improper fraction (i.e. 7/4), select the improper fraction and toggle "strict" to true. This ',d.createElement("b",null,"will not")," ","accept 1.75 as an answer."," "),d.createElement("p",null,"Unless you are testing that specific skill, please do not restrict the answer format."))),d.createElement("div",{className:"perseus-widget-row"},d.createElement(Xp,{label:"Strictly match only these formats",strict:e[t].strict,onChange:this.updateAnswer.bind(this,t)}))),r=t=>d.createElement("div",{className:"perseus-widget-row"},d.createElement("label",null,"Max error"," ",d.createElement(Jp,{className:"max-error",value:e[t].maxError,onChange:this.updateAnswer(t,"maxError"),placeholder:"0"}))),s=d.createElement("div",{className:"perseus-widget-row"},d.createElement("label",null,"Width: "),d.createElement(Hp,{value:this.props.size,allowEmpty:!1,buttons:[{value:"normal",content:"Normal (80px)"},{value:"small",content:"Small (40px)"}],onChange:this.change("size")}),d.createElement(Gp,null,d.createElement("p",null,'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.'))),a=d.createElement("div",{className:"perseus-widget-row"},d.createElement(Xp,{label:"Right alignment",rightAlign:this.props.rightAlign,onChange:this.props.onChange})),i=d.createElement("div",{className:"perseus-widget-row"},d.createElement("label",null,"Label text:"," ",d.createElement(Zp,{value:this.props.labelText,onChange:this.change("labelText")})),d.createElement(Gp,null,d.createElement("p",null,"Text to describe this input. This will be shown to users using screenreaders."))),o=d.createElement("div",null,d.createElement("div",{className:"perseus-widget-row"},d.createElement(Xp,{label:"Coefficient",coefficient:this.props.coefficient,onChange:this.props.onChange}),d.createElement(Gp,null,d.createElement("p",null,"A coefficient style number allows the student to use - for -1 and an empty string to mean 1.")))),l=d.createElement("div",null,d.createElement("a",{href:"javascript:void(0)",className:"simple-button orange",onClick:()=>this.addAnswer(),onKeyDown:e=>this.onSpace(e,this.addAnswer)},d.createElement("span",null,"Add new answer"))),c={wrong:"(address the mistake/misconception)",ungraded:"(explain in detail to avoid confusion)",correct:"(reinforce the user's understanding)"};return d.createElement("div",{className:"perseus-input-number-editor"},d.createElement("div",{ref:e=>this.multInputOption=e},d.createElement("select",{onChange:this.onMultipleInputChange},d.createElement("option",{value:"simple-numeric-input"},"Ask for one correct solution"),d.createElement("option",{value:"multiple-numeric-input"},"Ask for all correct solutions"))),d.createElement("div",{className:"ui-title"},"User input"),d.createElement("div",{className:"msg-title"},"Message shown to user on attempt"),(()=>e.map(((s,a)=>{const i=d.createElement(Un,{apiOptions:this.props.apiOptions,content:s.message||"",placeholder:"Why is this answer "+s.status+"?\t"+c[s.status],widgetEnabled:!1,onChange:e=>{"content"in e&&this.updateAnswer(a,{message:e.content})}});return d.createElement("div",{className:"perseus-widget-row",key:a},d.createElement("div",{className:"input-answer-editor-value-container"+(s.maxError?" with-max-error":"")},d.createElement(Jp,{value:s.value,className:"numeric-input-value",placeholder:"answer",format:f.default.last(s.answerForms),onFormatChange:(e,t)=>{let n;"pi"===t?n=["pi"]:"mixed"===t?n=["proper","mixed"]:"proper"!==t&&"improper"!==t||(n=["proper","improper"]),this.updateAnswer(a,{value:th(e),answerForms:n})},onChange:e=>{this.updateAnswer(a,{value:th(e)})}}),s.strict&&d.createElement("div",{className:"is-strict-indicator",title:"strictly equivalent to"},"≡"),"required"!==s.simplify&&"correct"===s.status&&d.createElement("div",{className:"simplify-indicator "+s.simplify,title:"accepts unsimplified answers"},"‰"),s.maxError?d.createElement("div",{className:"max-error-container"},d.createElement("div",{className:"max-error-plusmn"},"±"),d.createElement(Jp,{placeholder:0,value:e[a].maxError,format:f.default.last(s.answerForms),onChange:this.updateAnswer(a,"maxError")})):null,d.createElement("div",{className:"value-divider"}),d.createElement("a",{href:"javascript:void(0)",className:"answer-status "+s.status,onClick:()=>this.onStatusChange(a),onKeyDown:e=>this.onSpace(e,this.onStatusChange,a)},s.status),d.createElement("a",{href:"javascript:void(0)",className:"answer-trash",onClick:()=>this.onTrashAnswer(a),onKeyDown:e=>this.onSpace(e,this.onTrashAnswer,a)},d.createElement(Yp,eh)),d.createElement("a",{href:"javascript:void(0)",className:"options-toggle",onClick:()=>this.onToggleOptions(a),onKeyDown:e=>this.onSpace(e,this.onToggleOptions,a)},d.createElement(Yp,Qp))),d.createElement("div",{className:"input-answer-editor-message"},i),this.state.showOptions[a]&&d.createElement("div",{className:"options-container"},r(a),"correct"===s.status&&t(a),n(a)))})))(),l,s,a,o,i)},change(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return e.Changeable.change.apply(this,n)},onToggleOptions:function(e){const t=this.state.showOptions.slice();t[e]=!t[e],this.setState({showOptions:t})},onTrashAnswer:function(e){if(e>=0&&e<this.props.answers.length){const t=this.props.answers.slice(0);t.splice(e,1),this.props.onChange({answers:t})}},onSpace:function(e,t){if(" "===e.key){e.preventDefault();const n=f.default.toArray(arguments).slice(2);t.apply(this,n)}},onStatusChange:function(e){const t=["wrong","ungraded","correct"],n=this.props.answers,r=t[(f.default.indexOf(t,n[e].status)+1)%t.length];this.updateAnswer(e,{status:r,simplify:"correct"===r?"required":"accepted"})},onMultipleInputChange:function(e){"multiple-numeric-input"===e.target.value?this.props.onChange({multipleNumberInput:!0}):this.props.onChange({multipleNumberInput:!1})},updateAnswer:function(e,t){if(!f.default.isObject(t))return f.default.partial(((e,t,n)=>{const r={};r[t]=n,this.updateAnswer(e,r)}),e,t);let n=f.default.clone(this.props.answers);if(e===n.length){const e=rh(this.state.lastStatus);n=n.concat(e)}n[e]=f.default.extend({},n[e],t),this.props.onChange({answers:n})},addAnswer:function(){const e=rh(this.state.lastStatus),t=this.props.answers.concat(e);this.props.onChange({answers:t})},getSaveWarnings:function(){const e=[];return f.default.contains(f.default.pluck(this.props.answers,"value"),"")&&e.push("One or more answers is empty"),this.props.answers.forEach(((t,n)=>{t.strict&&(!t.answerForms||0===t.answerForms.length)&&e.push("Answer ".concat(n+1," is set to string format ")+"matching, but no format was selected")})),e},serialize(){return e.EditorJsonify.serialize.call(this)}}),{InfoTip:ah,TextListEditor:ih}=e.components;class oh extends d.Component{constructor(){super(...arguments),C(this,"onOptionsChange",((e,t,n)=>{const r={};r[e]=f.default.map(t,(function(e){return{content:e}})),this.props.onChange(r,n)})),C(this,"onLayoutChange",(e=>{this.props.onChange({layout:e.target.value})})),C(this,"onHeightChange",(e=>{this.props.onChange({height:e.target.value})})),C(this,"serialize",(()=>({options:f.default.chain(f.default.pluck(this.props.correctOptions,"content")).union(f.default.pluck(this.props.otherOptions,"content")).uniq().reject((function(e){return""===e})).sort().sortBy((function(e){return/\d/.test(e)?0:/^\$?[a-zA-Z]+\$?$/.test(e)?2:1})).map((function(e){return{content:e}})).value(),correctOptions:this.props.correctOptions,otherOptions:this.props.otherOptions,height:this.props.height,layout:this.props.layout})))}render(){return d.createElement("div",{className:"perseus-widget-orderer"},d.createElement("div",null," ","Correct answer:"," ",d.createElement(ah,null,d.createElement("p",null,"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."))),d.createElement(ih,{options:f.default.pluck(this.props.correctOptions,"content"),onChange:this.onOptionsChange.bind(this,"correctOptions"),layout:this.props.layout}),d.createElement("div",null," ","Other cards:"," ",d.createElement(ah,null,d.createElement("p",null,"Create cards that are not part of the answer."))),d.createElement(ih,{options:f.default.pluck(this.props.otherOptions,"content"),onChange:this.onOptionsChange.bind(this,"otherOptions"),layout:this.props.layout}),d.createElement("div",null,d.createElement("label",null," ","Layout:"," ",d.createElement("select",{value:this.props.layout,onChange:this.onLayoutChange},d.createElement("option",{value:"horizontal"},"Horizontal"),d.createElement("option",{value:"vertical"},"Vertical"))),d.createElement(ah,null,d.createElement("p",null,"Use the horizontal layout for short text and small images. The vertical layout is best for longer text (e.g. proofs)."))),d.createElement("div",null,d.createElement("label",null," ","Height:"," ",d.createElement("select",{value:this.props.height,onChange:this.onHeightChange},d.createElement("option",{value:"normal"},"Normal"),d.createElement("option",{value:"auto"},"Automatic"))),d.createElement(ah,null,d.createElement("p",null,'Use "Normal" for text, "Automatic" for images.'))))}}C(oh,"propTypes",{correctOptions:g.default.array,otherOptions:g.default.array,height:g.default.oneOf(["normal","auto"]),layout:g.default.oneOf(["horizontal","vertical"]),onChange:g.default.func.isRequired}),C(oh,"widgetName","orderer"),C(oh,"defaultProps",{correctOptions:[{content:"$x$"}],otherOptions:[{content:"$y$"}],height:"normal",layout:"horizontal"});const{InfoTip:lh,PropCheckBox:ch}=e.components;class ph extends d.Component{constructor(){var t;super(...arguments),t=this,C(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),C(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){const e=d.createElement(Un,{ref:"passage-editor",apiOptions:this.props.apiOptions,content:this.props.passageText,widgetEnabled:!1,placeholder:"Type passage here...",onChange:e=>{this.change({passageText:e.content})},showWordCount:!0}),t=d.createElement(Un,{ref:"passage-footnotes-editor",apiOptions:this.props.apiOptions,content:this.props.footnotes,widgetEnabled:!1,placeholder:"Type footnotes here...",onChange:e=>{this.change({footnotes:e.content})}});return d.createElement("div",{className:"perseus-widget-passage-editor"},d.createElement("div",{className:"perseus-widget-row"},d.createElement(ch,{label:"Show line numbers",labelAlignment:"right",showLineNumbers:this.props.showLineNumbers,onChange:this.props.onChange})),d.createElement("div",null,"Passage title:",d.createElement(lh,null,d.createElement("p",null,"An optional title that will appear directly above the passage in the same font style. (E.g. Passage 1)")),d.createElement("div",null,d.createElement("input",{type:"text",defaultValue:this.props.passageTitle,onChange:e=>{this.change({passageTitle:e.target.value})}}))),d.createElement("div",null,"Passage Text:",e),d.createElement("div",null,"Footnotes:",d.createElement(lh,null,d.createElement("p",null,"To add footnotes, add ^ characters where they belong in the passage. Then, add ^ in the footnotes area to reference the footnotes in the passage.")),t))}}C(ph,"propTypes",{...e.Changeable.propTypes,passageTitle:g.default.string,passageText:g.default.string,footnotes:g.default.string,showLineNumbers:g.default.bool}),C(ph,"widgetName","passage"),C(ph,"defaultProps",{passageTitle:"",passageText:"",footnotes:"",showLineNumbers:!0});const{InfoTip:hh,NumberInput:uh,TextInput:dh}=e.components;class mh extends d.Component{constructor(){var t;super(...arguments),t=this,C(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),C(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){return d.createElement("div",null,d.createElement("div",null,d.createElement("label",null,"Passage Number: ",d.createElement(uh,{value:this.props.passageNumber,onChange:this.change("passageNumber")}))),d.createElement("div",null,d.createElement("label",null,"Reference Number: ",d.createElement(uh,{value:this.props.referenceNumber,onChange:this.change("referenceNumber")}))),d.createElement("div",null,d.createElement("label",null,"Summary Text: ",d.createElement(dh,{value:this.props.summaryText,onChange:this.change("summaryText")}),d.createElement(hh,null,d.createElement("p",null,"Short summary of the referenced section. This will be included in parentheses and quotes automatically."),d.createElement("p",null,"Ex: The start ... the end")))))}}C(mh,"propTypes",{...e.Changeable.propTypes,passageNumber:g.default.number,referenceNumber:g.default.number,summaryText:g.default.string}),C(mh,"widgetName","passage-ref"),C(mh,"defaultProps",{passageNumber:1,referenceNumber:1,summaryText:""});class fh extends d.Component{constructor(){var t;super(...arguments),t=this,C(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),C(this,"handleContentChange",(e=>{this.change({content:e.target.value})})),C(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){return d.createElement("div",null,"Content:",d.createElement("input",{type:"text",value:this.props.content,onChange:this.handleContentChange}))}}C(fh,"propTypes",{...e.Changeable.propTypes,content:g.default.string}),C(fh,"widgetName","passage-ref-target"),C(fh,"defaultProps",{content:""});const{InfoTip:gh,NumberInput:vh,RangeInput:yh,TextListEditor:bh}=e.components,Eh=e.PlotterWidget.widget;function wh(e,t,n){const r=f.default.clone(e);r.length=t;for(let s=e.length;s<t;s++)r[s]=n;return r}const xh={scaleY:1,maxY:10,snapsPerLine:2},Ch={type:g.default.oneOf(["bar","line","pic","histogram","dotplot"]),labels:g.default.arrayOf(g.default.string),categories:g.default.arrayOf(g.default.oneOfType([g.default.number,g.default.string])),scaleY:g.default.number,maxY:g.default.number,snapsPerLine:g.default.number,picSize:g.default.number,pixBoxHeight:g.default.number,picUrl:g.default.string,plotDimensions:g.default.arrayOf(g.default.number),labelInterval:g.default.number,starting:g.default.arrayOf(g.default.number),correct:g.default.arrayOf(g.default.number),static:g.default.bool,onChange:g.default.func},Sh=e=>"$"+sa.round(e,2)+"$";class kh extends d.Component{constructor(){super(...arguments),C(this,"state",{editing:this.props.static?"starting":"correct",pic:null,loadedUrl:null,minX:null,maxX:null,tickStep:null}),C(this,"fetchPic",(e=>{if(this.state.loadedUrl!==e){const t=new Image;t.src=e,t.onload=()=>{this.setState({pic:t,loadedUrl:e})}}})),C(this,"handleChangeTickStep",(e=>{this.setState({tickStep:e})})),C(this,"handleChangeRange",(e=>{this.setState({minX:e[0],maxX:e[1]})})),C(this,"changeLabelInterval",(e=>{this.props.onChange({labelInterval:e})})),C(this,"handlePlotterChange",(e=>{const t={};t[this.state.editing]=e.values,this.props.onChange(t)})),C(this,"changeType",(e=>{let t;if("histogram"===e?(t=[Sh(0)].concat(this.props.categories),this.props.onChange({type:e,categories:t})):"histogram"===this.props.type?(t=this.props.categories.slice(1),this.props.onChange({type:e,categories:t})):this.props.onChange({type:e}),t){E.default.findDOMNode(this.refs.categories).value=t.join(", ")}})),C(this,"changeLabel",((e,t)=>{const n=f.default.clone(this.props.labels);n[e]=t.target.value,this.props.onChange({labels:n})})),C(this,"changePicUrl",(t=>{const n=e.Util.getRealImageUrl(t);this.props.onChange({picUrl:n})})),C(this,"changeCategories",(e=>{let t=e.length;"histogram"===this.props.type&&t--;const n=this.props.scaleY;this.props.onChange({categories:e,correct:wh(this.props.correct,t,n),starting:wh(this.props.starting,t,n)})})),C(this,"changeScale",(e=>{const t=this.props.scaleY,n=+e.target.value||xh.scaleY,r=function(e){return e*n/t},s=r(this.props.maxY);this.props.onChange({scaleY:n,maxY:s,correct:f.default.map(this.props.correct,r),starting:f.default.map(this.props.starting,r)}),E.default.findDOMNode(this.refs.maxY).value=s})),C(this,"changeMax",(e=>{this.props.onChange({maxY:+e.target.value||xh.maxY})})),C(this,"changeSnaps",(e=>{this.props.onChange({snapsPerLine:+e.target.value||xh.snapsPerLine})})),C(this,"changeEditing",(e=>{this.setState({editing:e})})),C(this,"setCategoriesFromScale",(()=>{const e=this.state.tickStep||1,t=this.state.minX||0,n=this.state.maxX||0,r=Math.floor((n-t)/e)*e;let s;s="histogram"===this.props.type||"dotplot"===this.props.type?f.default.range(0,r+e,e):f.default.range(e,r+e,e),s=f.default.map(s,(e=>e+t)),s=f.default.map(s,Sh),this.changeCategories(s);E.default.findDOMNode(this.refs.categories).value=s.join(", ")})),C(this,"serialize",(()=>{const e=f.default.pick(this.props,"correct","starting","type","labels","categories","scaleY","maxY","snapsPerLine","labelInterval");return"pic"===this.props.type&&(e.picUrl=this.props.picUrl),e}))}UNSAFE_componentWillMount(){this.fetchPic(this.props.picUrl)}UNSAFE_componentWillReceiveProps(e){this.fetchPic(e.picUrl),e.static&&this.setState({editing:"starting"})}render(){const e=f.default.contains(["line","histogram","dotplot"],this.props.type),t=!f.default.contains(["pic","dotplot"],this.props.type),n={trackInteraction:()=>{},...this.props};return d.createElement("div",{className:"perseus-widget-plotter-editor"},d.createElement("div",null,"Chart type:"," ",f.default.map(["bar","line","pic","histogram","dotplot"],(function(e){return d.createElement("label",{key:e},d.createElement("input",{type:"radio",name:"chart-type",checked:this.props.type===e,onChange:f.default.partial(this.changeType,e)}),e)}),this)),d.createElement("div",null,"Labels:"," ",f.default.map(["x","y"],(function(e,t){return d.createElement("label",{key:e},e+":",d.createElement("input",{type:"text",onChange:f.default.partial(this.changeLabel,t),defaultValue:this.props.labels[t]}))}),this)),e&&d.createElement("div",{className:"set-from-scale-box"},d.createElement("span",{className:"categories-title"},"Set Categories From Scale"),d.createElement("div",null,d.createElement("label",null,"Tick Step:"," ",d.createElement(vh,{placeholder:1,useArrowKeys:!0,value:this.state.tickStep,onChange:this.handleChangeTickStep})),d.createElement(gh,null,d.createElement("p",null,"The difference between adjacent ticks."))),d.createElement("div",null,d.createElement("label",null,"Range:"," ",d.createElement(yh,{placeholder:[0,10],useArrowKeys:!0,value:[this.state.minX,this.state.maxX],onChange:this.handleChangeRange}))),d.createElement("div",null,d.createElement("button",{onClick:this.setCategoriesFromScale},"Set Categories"," "))),d.createElement("div",null,d.createElement("label",null,"Label Interval:"," ",d.createElement(vh,{useArrowKeys:!0,value:this.props.labelInterval,onChange:this.changeLabelInterval})),d.createElement(gh,null,d.createElement("p",null,'Which ticks to display the labels for. For instance, setting this to "4" will only show every 4th label (plus the last one)'))),"pic"===this.props.type&&d.createElement("div",null,d.createElement("label",null,"Picture:"," ",d.createElement(Ls,{className:"pic-url",value:this.props.picUrl,onChange:this.changePicUrl}),d.createElement(gh,null,d.createElement("p",null,'Use the default picture of Earth, or insert the URL for a different picture using the "Add image" function.'))),this.state.pic&&this.state.pic.width!==this.state.pic.height&&d.createElement("p",{className:"warning"},d.createElement("b",null,"Warning"),": You are using a picture which is not square. This means the image will get distorted. You should probably crop it to be square.")),d.createElement("div",null,d.createElement("label",null,"Categories:"," ",d.createElement(bh,{ref:"categories",layout:"horizontal",options:this.props.categories,onChange:this.changeCategories}))),d.createElement("div",null,d.createElement("label",null,"Scale (y):"," ",d.createElement("input",{type:"text",onChange:this.changeScale,defaultValue:this.props.scaleY}))),d.createElement("div",null,d.createElement("label",null,"Max y:"," ",d.createElement("input",{type:"text",ref:"maxY",onChange:this.changeMax,defaultValue:this.props.maxY}))),t&&d.createElement("div",null,d.createElement("label",null,"Snaps per line:"," ",d.createElement("input",{type:"text",onChange:this.changeSnaps,defaultValue:this.props.snapsPerLine})),d.createElement(gh,null,d.createElement("p",null,"Creates the specified number of divisions between the horizontal lines. Fewer snaps between lines makes the graph easier for the student to create correctly."))),d.createElement("div",null,"Editing values:"," ",["correct","starting"].map((e=>d.createElement("label",{key:e},d.createElement("input",{type:"radio",disabled:"correct"===e&&this.props.static,checked:this.props.static?"starting"===e:this.state.editing===e,onChange:t=>this.changeEditing(e)}),e))),d.createElement(gh,null,d.createElement("p",null,"Use this toggle to switch between editing the correct answer (what the student will be graded on) and the starting values (what the student will see plotted when they start the problem). Note: These cannot be the same."),d.createElement("p",null,"In static mode, the starting values are rendered out to the displayed widget."))),d.createElement(Eh,S({},n,{starting:this.props[this.state.editing],onChange:this.handlePlotterChange})))}}C(kh,"propTypes",Ch),C(kh,"widgetName","plotter"),C(kh,"defaultProps",{...xh,correct:[1],starting:[1],type:"bar",labels:["",""],categories:[""],picSize:30,picBoxHeight:36,plotDimensions:[275,200],labelInterval:1,get picUrl(){const t=e.Dependencies.getDependencies().staticUrl;return t?t("/images/badges/earth-small.png"):null}});const{InlineIcon:Nh,PropCheckBox:Th}=e.components,{iconPlus:_h,iconTrash:Oh}=e.icons;class Mh extends d.Component{render(){const e=this.props.choice.correct?"correct":"incorrect";let t="Type a choice here...";this.props.choice.isNoneOfTheAbove&&(t=this.props.choice.correct?"Type the answer to reveal to the user...":"None of the above");const n=d.createElement(Un,{ref:"content-editor",apiOptions:this.props.apiOptions,content:this.props.choice.content||"",widgetEnabled:!1,placeholder:t,disabled:this.props.choice.isNoneOfTheAbove&&!this.props.choice.correct,onChange:this.props.onContentChange}),r=d.createElement(Un,{ref:"clue-editor",apiOptions:this.props.apiOptions,content:this.props.choice.clue||"",widgetEnabled:!1,placeholder:x._("Why is this choice %(correctOrIncorrect)s?",{correctOrIncorrect:e}),onChange:this.props.onClueChange}),s=d.createElement("a",{className:"simple-button orange delete-choice",href:"#",onClick:this.props.onDelete,title:"Remove this choice"},d.createElement(Nh,Oh));return d.createElement("div",{className:"choice-clue-editors"},d.createElement("div",{className:"choice-editor ".concat(e)},n),d.createElement("div",{className:"clue-editor"},r),this.props.showDelete&&s)}}C(Mh,"propTypes",{apiOptions:e.ApiOptions.propTypes,choice:g.default.object,showDelete:g.default.bool,onClueChange:g.default.func,onContentChange:g.default.func,onDelete:g.default.func});class Ah extends d.Component{constructor(){var t;super(...arguments),t=this,C(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),C(this,"onMultipleSelectChange",(e=>{e=e.multipleSelect;const t=f.default.reduce(this.props.choices,(function(e,t){return t.correct?e+1:e}),0);if(!e&&t>1){const t=f.default.map(this.props.choices,(function(e){return f.default.defaults({correct:!1},e)}));this.props.onChange({multipleSelect:e,choices:t})}else this.props.onChange({multipleSelect:e})})),C(this,"onCountChoicesChange",(e=>{e=e.countChoices,this.props.onChange({countChoices:e})})),C(this,"onChange",(e=>{let{checked:t}=e;const n=f.default.map(this.props.choices,((e,n)=>f.default.extend({},e,{correct:t[n],content:e.isNoneOfTheAbove&&!t[n]?"":e.content})));this.props.onChange({choices:n})})),C(this,"onContentChange",((e,t)=>{const n=this.props.choices.slice();n[e]=f.default.extend({},n[e],{content:t}),this.props.onChange({choices:n})})),C(this,"onClueChange",((e,t)=>{const n=this.props.choices.slice();n[e]=f.default.extend({},n[e],{clue:t}),""===t&&delete n[e].clue,this.props.onChange({choices:n})})),C(this,"onDelete",((e,t)=>{t.preventDefault();const n=this.props.choices.slice(),r=n[e];n.splice(e,1),this.props.onChange({choices:n,hasNoneOfTheAbove:this.props.hasNoneOfTheAbove&&!r.isNoneOfTheAbove})})),C(this,"addChoice",((e,t)=>{t.preventDefault();const n=this.props.choices.slice(),r={isNoneOfTheAbove:e},s=n.length-(this.props.hasNoneOfTheAbove?1:0);n.splice(s,0,r),this.props.onChange({choices:n,hasNoneOfTheAbove:e||this.props.hasNoneOfTheAbove},(()=>{this.refs["choice-editor".concat(s)].refs["content-editor"].focus()}))})),C(this,"setDisplayCount",(e=>{this.props.onChange({displayCount:e})})),C(this,"focus",(()=>(this.refs["choice-editor0"].refs["content-editor"].focus(),!0))),C(this,"getSaveWarnings",(()=>f.default.some(f.default.pluck(this.props.choices,"correct"))?[]:["No choice is marked as correct."])),C(this,"serialize",(()=>f.default.pick(this.props,"choices","randomize","multipleSelect","countChoices","displayCount","hasNoneOfTheAbove","deselectEnabled")))}render(){const t=f.default.reduce(this.props.choices,(function(e,t){return t.correct?e+1:e}),0);return d.createElement("div",null,d.createElement("div",{className:"perseus-widget-row"},d.createElement("a",{href:"https://docs.google.com/document/d/1frZf7yrWVWb1n4tVjqlzqVUiv1pn4cZXbxgP62-JDBY/edit#heading=h.8ng1isya19nu",target:"_blank"},"Multiple choice style guide"),d.createElement("br",null),d.createElement("div",{className:"perseus-widget-left-col"},d.createElement(Th,{label:"Multiple selections",labelAlignment:"right",multipleSelect:this.props.multipleSelect,onChange:this.onMultipleSelectChange})),d.createElement("div",{className:"perseus-widget-right-col"},d.createElement(Th,{label:"Randomize order",labelAlignment:"right",randomize:this.props.randomize,onChange:this.props.onChange})),this.props.multipleSelect&&d.createElement("div",{className:"perseus-widget-left-col"},d.createElement(Th,{label:"Specify number correct",labelAlignment:"right",countChoices:this.props.countChoices,onChange:this.onCountChoicesChange}))),d.createElement(e.BaseRadio,{ref:"baseRadio",multipleSelect:this.props.multipleSelect,countChoices:this.props.countChoices,numCorrect:t,editMode:!0,labelWrap:!1,apiOptions:this.props.apiOptions,choices:this.props.choices.map((function(e,t){return{content:d.createElement(Mh,{ref:"choice-editor".concat(t),apiOptions:this.props.apiOptions,choice:e,onContentChange:e=>{"content"in e&&this.onContentChange(t,e.content)},onClueChange:e=>{"content"in e&&this.onClueChange(t,e.content)},onDelete:this.onDelete.bind(this,t),showDelete:this.props.choices.length>=2}),isNoneOfTheAbove:e.isNoneOfTheAbove,checked:e.correct}}),this),onChange:this.onChange}),d.createElement("div",{className:"add-choice-container"},d.createElement("a",{className:"simple-button orange",href:"#",onClick:this.addChoice.bind(this,!1)},d.createElement(Nh,_h)," Add a choice"," "),!this.props.hasNoneOfTheAbove&&d.createElement("a",{className:"simple-button",href:"#",onClick:this.addChoice.bind(this,!0)},d.createElement(Nh,_h)," None of the above"," ")))}}C(Ah,"propTypes",{...e.Changeable.propTypes,apiOptions:e.ApiOptions.propTypes,choices:g.default.arrayOf(g.default.shape({content:g.default.string,clue:g.default.string,correct:g.default.bool})),displayCount:g.default.number,randomize:g.default.bool,hasNoneOfTheAbove:g.default.bool,multipleSelect:g.default.bool,countChoices:g.default.bool,deselectEnabled:g.default.bool,static:g.default.bool}),C(Ah,"widgetName","radio"),C(Ah,"defaultProps",{choices:[{},{}],displayCount:null,randomize:!1,hasNoneOfTheAbove:!1,multipleSelect:!1,countChoices:!1,deselectEnabled:!1});const{NumberInput:Ph,TextInput:Dh}=e.components;class Ih extends d.Component{constructor(){var t;super(...arguments),t=this,C(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),C(this,"updateMolecule",(e=>function(t){const n=[...this.props.smiles];n[e]=t,this.change({smiles:n})}.bind(this))),C(this,"updateRotation",(e=>function(t){const n=[...this.props.rotationAngle];n[e]=t,this.change({rotationAngle:n})}.bind(this))),C(this,"updateSeparators",((e,t)=>n=>{const r=this.props.separators.map((e=>({...e})));r[e][t]=n,this.change({separators:r})})),C(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){return d.createElement("div",null,d.createElement("div",null,d.createElement("label",null,"LHS SMILES: ",d.createElement(Dh,{onChange:this.updateMolecule(0),value:this.props.smiles[0]}))),d.createElement("div",null,d.createElement("label",null,"LHS Rotation (deg): ",d.createElement(Ph,{onChange:this.updateRotation(0),value:this.props.rotationAngle[0]}))),d.createElement("div",null,d.createElement("label",null,"RHS SMILES: ",d.createElement(Dh,{onChange:this.updateMolecule(1),value:this.props.smiles[1]}))),d.createElement("div",null,d.createElement("label",null,"RHS Rotation (deg): ",d.createElement(Ph,{onChange:this.updateRotation(1),value:this.props.rotationAngle[1]}))),d.createElement("div",null,d.createElement("label",null,"Top of arrow text: ",d.createElement(Dh,{onChange:this.updateSeparators(0,"topText"),value:this.props.separators[0].topText}))),d.createElement("div",null,d.createElement("label",null,"Bottom of arrow text: ",d.createElement(Dh,{onChange:this.updateSeparators(0,"bottomText"),value:this.props.separators[0].bottomText}))))}}C(Ih,"propTypes",{...e.Changeable.propTypes,rotationAngle:g.default.arrayOf(g.default.number),separators:g.default.arrayOf(g.default.object),smiles:g.default.arrayOf(g.default.string)}),C(Ih,"widgetName","reaction-diagram"),C(Ih,"defaultProps",{smiles:["",""],rotationAngle:[0,0],separators:[{type:"right",topText:"",bottomText:""}]});const{InlineIcon:Rh}=e.components,{iconCircleArrowDown:zh,iconCircleArrowUp:Lh,iconPlus:Fh,iconTrash:Uh}=e.icons;class qh extends d.Component{render(){return d.createElement("a",{href:"#",className:"step-control-button simple-button simple-button--small orange",onClick:e=>{e.preventDefault(),this.props.onClick()}},d.createElement(Rh,this.props.icon))}}class Wh extends d.Component{constructor(){super(...arguments),C(this,"_handleEditorChange",((e,t)=>{const n=f.default.clone(this.props.json);n[e]=f.default.extend({},n[e],t),this.props.onChange({json:n})})),C(this,"serialize",(()=>({json:f.default.times(this.props.json.length,(e=>this.refs["editor"+e].serialize()))}))),C(this,"_handleMoveStepEarlier",(e=>{if(0===e)return;const t=f.default.clone(this.props.json),n=t[e];t.splice(e,1),t.splice(e-1,0,n),this.props.onChange({json:t})})),C(this,"_handleMoveStepLater",(e=>{const t=f.default.clone(this.props.json);if(e+1===t.length)return;const n=t[e];t.splice(e,1),t.splice(e+1,0,n),this.props.onChange({json:t})})),C(this,"_handleAddStepAfter",(e=>{const t=f.default.clone(this.props.json),n=e>=0?{widgets:t[e].widgets}:{};t.splice(e+1,0,n),this.props.onChange({json:t})})),C(this,"_handleRemoveStep",(e=>{const t=f.default.clone(this.props.json);t.splice(e,1),this.props.onChange({json:t})}))}render(){return d.createElement("div",{className:"perseus-sequence-editor"},f.default.map(this.props.json,((e,t)=>d.createElement("div",{key:t},"Step ",t+1,d.createElement("div",{style:{display:"inline-block",float:"right"}},t+1<this.props.json.length&&d.createElement(qh,{icon:zh,onClick:()=>{this._handleMoveStepLater(t)}}),t>0&&d.createElement(qh,{icon:Lh,onClick:()=>{this._handleMoveStepEarlier(t)}}),d.createElement(qh,{icon:Uh,onClick:()=>{confirm("Are you sure you want to remove step "+(t+1)+"?")&&this._handleRemoveStep(t)}}),d.createElement(qh,{icon:Fh,onClick:()=>{this._handleAddStepAfter(t)}})),d.createElement(Un,{ref:"editor"+t,apiOptions:this.props.apiOptions,content:e.content,widgets:e.widgets,images:e.images,widgetEnabled:!0,immutableWidgets:!1,onChange:f.default.partial(this._handleEditorChange,t)})))))}}C(Wh,"propTypes",{json:g.default.arrayOf(g.default.shape({content:g.default.string,widgets:g.default.objectOf(g.default.any),images:g.default.objectOf(g.default.any)})),apiOptions:e.ApiOptions.propTypes,onChange:g.default.func.isRequired}),C(Wh,"widgetName","sequence"),C(Wh,"defaultProps",{json:[{content:"",widgets:{},images:{}}]});class Vh extends d.Component{constructor(){super(...arguments),C(this,"focus",(()=>(this.refs.input.focus(),!0))),C(this,"changeValue",(e=>{this.props.onChange(e.target.value)}))}render(){return d.createElement("textarea",{ref:"input",value:this.props.value||"",onChange:this.changeValue})}}class jh extends d.Component{constructor(){var t;super(...arguments),t=this,C(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),C(this,"focus",(()=>(this.refs.input.focus(),!0))),C(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){return d.createElement("div",null,d.createElement("label",null,d.createElement("div",null,"Simple markdown contents:"),d.createElement("div",null,d.createElement(Vh,{value:this.props.value,onChange:this.change("value"),ref:"input"}))))}}C(jh,"propTypes",{...e.Changeable.propTypes}),C(jh,"widgetName","simple-markdown-tester"),C(jh,"defaultProps",{value:""});const{InfoTip:Bh,NumberInput:$h}=e.components;class Hh extends d.Component{constructor(){var t;super(...arguments),t=this,C(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),C(this,"handleTargetValueChange",((e,t)=>{this.change(e,t.target.value)})),C(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){return d.createElement("div",{className:"perseus-widget-simulator"},d.createElement("div",null,x._("X-Axis Label"),":",d.createElement("input",{type:"text",className:"graph-settings-axis-label",value:this.props.xAxisLabel,onChange:f.default.partial(this.handleTargetValueChange,"xAxisLabel")})),d.createElement("div",null,x._("Y-Axis Label"),":",d.createElement("input",{type:"text",className:"graph-settings-axis-label",value:this.props.yAxisLabel,onChange:f.default.partial(this.handleTargetValueChange,"yAxisLabel")})),d.createElement("div",null,x._('"True Proportion" Label'),":",d.createElement("input",{type:"text",className:"graph-settings-axis-label",value:this.props.proportionLabel,onChange:f.default.partial(this.handleTargetValueChange,"proportionLabel")}),d.createElement(Bh,null,d.createElement("p",null,'This text will be displayed next to the box in which the user enters the sample proportion for their simulation. For example, if your question is about surveying for approval ratings, you might want this to say "Sample approval rating".'))),d.createElement("div",null,x._("Proportion or Percentage"),":",d.createElement("select",{className:"perseus-widget-dropdown",value:this.props.proportionOrPercentage,onChange:f.default.partial(this.handleTargetValueChange,"proportionOrPercentage")},d.createElement("option",{key:"proportion",value:"proportion"},"Proportion"),d.createElement("option",{key:"percentage",value:"percentage"},"Percentage")),d.createElement(Bh,null,d.createElement("p",null,"Do you want the user to describe their simulation in terms of a proportion or a percentage?"))),d.createElement("div",null,x._("Number of trials"),":",d.createElement($h,{value:this.props.numTrials,checkValidity:e=>e>=0&&e<=5e3,onChange:this.change("numTrials")}),d.createElement(Bh,null,d.createElement("p",null,"This controls the number of trials used in the simulation. For example, if you set this to 50, then the survey will be conducted 50 times. Warning: setting this too high (i.e., greater than 5000 or so) will freeze the page."))))}}C(Hh,"propTypes",{...e.Changeable.propTypes,xAxisLabel:g.default.string,yAxisLabel:g.default.string,numTrials:g.default.number,proportionLabel:g.default.string,proportionOrPercentage:g.default.string}),C(Hh,"widgetName","simulator"),C(Hh,"defaultProps",{xAxisLabel:"Proportion (%)",yAxisLabel:"Number of times seen",numTrials:100,proportionLabel:"Underlying proportion",proportionOrPercentage:"proportion"});const{InfoTip:Gh,PropCheckBox:Yh,TextListEditor:Kh}=e.components;class Jh extends d.Component{constructor(){super(...arguments),C(this,"onLayoutChange",(e=>{this.props.onChange({layout:e.target.value})})),C(this,"serialize",(()=>f.default.pick(this.props,"correct","layout","padding")))}render(){const e=this;return d.createElement("div",null,d.createElement("div",null," ","Correct answer:"," ",d.createElement(Gh,null,d.createElement("p",null,"Enter the correct answer (in the correct order) here. The preview on the right will have the cards in a randomized order, which is how the student will see them."))),d.createElement(Kh,{options:this.props.correct,onChange:function(t,n){e.props.onChange({correct:t},n)},layout:this.props.layout}),d.createElement("div",null,d.createElement("label",null," ","Layout:"," ",d.createElement("select",{value:this.props.layout,onChange:this.onLayoutChange},d.createElement("option",{value:"horizontal"},"Horizontal"),d.createElement("option",{value:"vertical"},"Vertical"))),d.createElement(Gh,null,d.createElement("p",null,"Use the horizontal layout for short text and small images. The vertical layout is best for longer text and larger images."))),d.createElement("div",null,d.createElement(Yh,{label:"Padding:",padding:this.props.padding,onChange:this.props.onChange}),d.createElement(Gh,null,d.createElement("p",null,"Padding is good for text, but not needed for images."))))}}C(Jh,"propTypes",{correct:g.default.array,layout:g.default.oneOf(["horizontal","vertical"]),padding:g.default.bool}),C(Jh,"widgetName","sorter"),C(Jh,"defaultProps",{correct:["$x$","$y$","$z$"],layout:"horizontal",padding:!0});const{InfoTip:Xh,NumberInput:Zh}=e.components,Qh=e.TableWidget.widget;class eu extends d.Component{constructor(){super(...arguments),C(this,"focus",(()=>{E.default.findDOMNode(this.refs.numberOfColumns).focus()})),C(this,"onSizeInput",((t,n)=>{let r=+t||0,s=+n||0;r=Math.min(Math.max(1,r),30),s=Math.min(Math.max(1,s),6);const a=this.props.columns,i=this.props.rows,o=this.props.answers;function l(e){s<=a?e.length=s:f.default(s-a).times((function(){e.push("")}))}r<=i?o.length=r:f.default(r-i).times((function(){o.push(e.Util.stringArrayOfSize(a))}));const c=this.props.headers;l(c),f.default.each(o,l),this.props.onChange({rows:r,columns:s,answers:o,headers:c})})),C(this,"serialize",(()=>{const e=f.default.pick(this.props,"headers","rows","columns");return f.default.extend({},e,{answers:f.default.map(this.props.answers,f.default.clone)})}))}render(){const e=f.default.pick(this.props,"headers","answers","onChange","apiOptions");return f.default.extend(e,{editableHeaders:!0,Editor:Un,onFocus:()=>{},onBlur:()=>{},trackInteraction:()=>{}}),d.createElement("div",null,d.createElement("div",{className:"perseus-widget-row"},d.createElement("label",null,"Number of columns:"," ",d.createElement(Zh,{ref:"numberOfColumns",value:this.props.columns,onChange:e=>{e&&this.onSizeInput(this.props.rows,e)},useArrowKeys:!0}))),d.createElement("div",{className:"perseus-widget-row"},d.createElement("label",null,"Number of rows:"," ",d.createElement(Zh,{ref:"numberOfRows",value:this.props.rows,onChange:e=>{e&&this.onSizeInput(e,this.props.columns)},useArrowKeys:!0}))),d.createElement("div",null," ","Table of answers:"," ",d.createElement(Xh,null,d.createElement("p",null,"The student has to fill out all cells in the table. For partially filled tables create a table using the template, and insert text input boxes as desired."))),d.createElement("div",null,d.createElement(Qh,e)))}}C(eu,"propTypes",{rows:g.default.number,columns:g.default.number,headers:g.default.arrayOf(g.default.string),answers:g.default.arrayOf(g.default.arrayOf(g.default.string))}),C(eu,"widgetName","table"),C(eu,"defaultProps",{headers:[""],rows:4,columns:1,answers:f.default(4).times((function(){return e.Util.stringArrayOfSize(1)}))});const{Graph:tu,InfoTip:nu,PropCheckBox:ru}=e.components,su=e.TransformerWidget.widget,{deepEq:au,getGridStep:iu}=e.Util;const ou={url:null};function lu(e,t){return e=f.default.clone(e).sort(Ha.compare),t=f.default.clone(t).sort(Ha.compare),f.default.all(f.default.map(e,(function(e,n){const r=t[n];return Ha.equal(e,r)})))}const cu={apiOptions:e.ApiOptions.defaults,gradeEmpty:!1,graphMode:"interactive",listMode:"dynamic",graph:{},tools:{translation:{enabled:!0,required:!1,constraints:{}},rotation:{enabled:!0,required:!1,constraints:{fixed:!1},coord:[1,6]},reflection:{enabled:!0,required:!1,constraints:{fixed:!1},coords:[[2,-4],[2,2]]},dilation:{enabled:!0,required:!1,constraints:{fixed:!1},coord:[6,6]}},drawSolutionShape:!0,starting:{shape:{type:"polygon-3",coords:[[2,2],[2,6],[7,2]]},transformations:[]},correct:{shape:{type:"polygon-3",coords:[[2,2],[2,6],[7,2]]},transformations:[]}};class pu extends d.Component{constructor(){super(...arguments),C(this,"changeConstraints",(e=>{const t=f.default.extend({},this.props.constraints,e);this.props.onChange({constraints:t})}))}render(){return d.createElement("div",null,this.props.name,":"," ",d.createElement(ru,{label:"enabled:",enabled:this.props.settings.enabled,onChange:this.props.onChange})," ",this.props.settings.enabled&&d.createElement(ru,{label:"required:",required:this.props.settings.required,onChange:this.props.onChange}),this.props.settings.enabled&&d.createElement(nu,null,"'Required' will only grade the answer as correct if the student has used at least one such transformation.")," ",this.props.allowFixed&&this.props.settings.enabled&&d.createElement(ru,{label:"fixed:",fixed:this.props.settings.constraints.fixed,onChange:this.changeConstraints}),this.props.allowFixed&&this.props.settings.enabled&&d.createElement(nu,null,"Enable 'fixed' to prevent the student from repositioning the tool. The tool will appear in the position at which it is placed in the editor below."))}}C(pu,"defaultProps",{allowFixed:!0});class hu extends d.Component{constructor(){super(...arguments),C(this,"getMode",(()=>this.props.graphMode+","+this.props.listMode)),C(this,"changeMode",(e=>{const t=e.target.value.split(",");this.props.onChange({graphMode:t[0],listMode:t[1]})})),C(this,"changeHandlerFor",(e=>t=>{const n=f.default.clone(this.props.tools);n[e]=f.default.extend({},this.props.tools[e],t),this.props.onChange({tools:n})}))}render(){return d.createElement("div",{className:"transformer-settings"},d.createElement("div",null," ","Mode:"," ",d.createElement("select",{value:this.getMode(),onChange:this.changeMode},d.createElement("option",{value:"interactive,dynamic"}," ","Exploration with text"," "),d.createElement("option",{value:"interactive,static"}," ","Exploration without text"," "),d.createElement("option",{value:"dynamic,interactive"}," ","Formal with movement"," "),d.createElement("option",{value:"static,interactive"}," ","Formal without movement"," ")),d.createElement(nu,null,d.createElement("ul",null,d.createElement("li",null,d.createElement("b",null,"Exploration:")," Students create transformations with tools on the graph."," "),d.createElement("li",null,d.createElement("b",null,"Formal with movement:")," Students specify transformations mathematically in the transformation list. Graph shows the results of these transformations."," "),d.createElement("li",null,d.createElement("b",null,"Formal without movement:")," Students specify transformations mathematically in the transformation list. Graph does not update."," ")))),d.createElement(pu,{name:"Translations",settings:this.props.tools.translation,allowFixed:!1,onChange:this.changeHandlerFor("translation")}),d.createElement(pu,{name:"Rotations",settings:this.props.tools.rotation,onChange:this.changeHandlerFor("rotation")}),d.createElement(pu,{name:"Reflections",settings:this.props.tools.reflection,onChange:this.changeHandlerFor("reflection")}),d.createElement(pu,{name:"Dilations",settings:this.props.tools.dilation,onChange:this.changeHandlerFor("dilation")}),d.createElement(ru,{label:"Draw Solution:",drawSolutionShape:this.props.drawSolutionShape,onChange:this.props.onChange}))}}const uu={getPointCountForType:function(e){const t=e.split("-");return"polygon"===t[0]?t[1]||3:"line"===t[0]||"lineSegment"===t[0]?2:"angle"===t[0]?3:"circle"===t[0]?2:"point"===t[0]?1:void 0},addMovableShape:function(t,n){if(n.editable&&n.translatable)throw new e.PerseusError("It doesn't make sense to have a movable shape where you can stretch the points and translate them simultaneously.",e.Errors.InvalidInput,{metadata:{options:n}});const r=f.default.map(n.shape.coords,(function(e){let a=!1,i=e;const o=t.addMovablePoint({coord:e,normalStyle:n.normalPointStyle,highlightStyle:n.highlightPointStyle,constraints:{fixed:!n.translatable&&!n.editable},visible:n.showPoints,snapX:n.snap&&n.snap[0]||0,snapY:n.snap&&n.snap[1]||0,bounded:!1,onMove:function(e,t){a||(i=o.coord,a=!0);let l=Ma.subtract([e,t],o.coord);n.onMove&&(l=n.onMove(l[0],l[1])),n.translatable&&f.default.each(r,(function(e){e!==o&&e.setCoord(Ma.add(e.coord,l))}));const c=o.coord,p=Ma.add(o.coord,l);return o.coord=p,s.update(),o.coord=c,p},onMoveEnd:function(){if(n.onMoveEnd&&a){a=!1;const e=Ma.subtract(o.coord,i);n.onMoveEnd(e[0],e[1])}s.update()}});return o.bounded=!0,o})),s=uu.addShape(t,n,r),a=s.remove;return s.remove=function(){a.apply(s),f.default.invoke(r,"remove")},s},addShape:function(e,t,n){n=n||t.shape.coords;const r=uu._typesOf(t.shape),s=t.shape.options||uu.defaultOptions(r),a=uu._mapTypes(r,n,(function(n,r,a){const i=f.default.extend({},t,s[a]);return uu._addType(e,n,r,i)})),i=f.default.filter(f.default.pluck(a,"update"),f.default.identity),o=f.default.filter(f.default.pluck(a,"remove"),f.default.identity),l=function(){return f.default.map(a,(function(e){return e.getOptions?e.getOptions():{}}))};return{type:r,points:n,update:function(){f.default.invoke(i,"call")},remove:function(){f.default.invoke(o,"call")},toJSON:function(){const e=f.default.map(n,(function(e){return f.default.isArray(e)?e:e.coord}));return{type:r,coords:e,options:l()}},getOptions:l}},equal:function(e,t){const n=uu._typesOf(e),r=uu._typesOf(t);if(n.length!==r.length)return!1;const s=uu._mapTypes(n,e.coords,uu._combine),a=uu._mapTypes(r,t.coords,uu._combine);return f.default.all(f.default.map(s,(function(e,t){const n=a[t];return e.type===n.type&&uu._forType(e.type).equal(e.coords,n.coords)})))},_typesOf:function(e){let t=e.type;return f.default.isArray(t)||(t=[t]),f.default.map(t,(function(e){return"polygon"===e?"polygon-3":e}))},defaultOptions:function(e){return f.default.map(e,(function(e){const t=uu._forType(e).defaultOptions;return f.default.extend({},t)}))},_forType:function(e){const t=e.split("-")[0];return uu[t]},_mapTypes:function(e,t,n,r){return f.default.map(e,(function(e,s){const a=uu.getPointCountForType(e),i=f.default.first(t,a);return t=f.default.rest(t,a),n.call(r,e,i,s)}))},_addType:function(t,n,r,s){const a=f.default.isArray(r[0])?{coordA:r[0],coordZ:r[1]}:{pointA:r[0],pointZ:r[1]};if("polygon"===(n=n.split("-")[0])){const e=t.addMovablePolygon(f.default.extend({},s,{fixed:!s.editable,snapX:s.snap&&s.snap[0]||0,snapY:s.snap&&s.snap[1]||0,points:r,constrainToGraph:!1}));return{update:e.transform.bind(e),remove:e.remove.bind(e)}}if("line"===n||"lineSegment"===n){const e=t.addMovableLineSegment(f.default.extend({},s,a,{movePointsWithLine:!0,fixed:!0,constraints:{fixed:!0},extendLine:"line"===n}));return{update:e.transform.bind(e,!0),remove:e.remove.bind(e)}}if("angle"===n){const e=!!s.editable&&null,n=t.addMovableAngle({angleLabel:"$deg0",fixed:!0,points:r,normalStyle:s.normalStyle,reflex:s.reflex});return f.default.isArray(r[0])||s.editable||(r[0].remove(),r[2].remove()),{update:n.update.bind(n,e),remove:n.remove.bind(n),getOptions:function(){return{reflex:n.isReflex()}}}}if("circle"===n){let n={remove:f.default.identity};const a=function(){const a=r[0].coord||r[0],i=r[1].coord||r[1],o=Ha.distanceToPoint(a,i);n.remove(),n=t.circle(a,o,f.default.extend({stroke:e.KhanColors.DYNAMIC,"stroke-width":2},s.normalStyle))};return a(),r[1].remove&&!s.editable&&r[1].remove(),{update:a,remove:function(){n.remove()}}}if("point"===n)return{update:null,remove:null};throw new e.PerseusError("Invalid shape type "+n,e.Errors.InvalidInput)},_combine:function(e,t){return{type:e,coords:t}},polygon:{equal:lu},line:{equal:Ga.equal},lineSegment:{equal:lu},angle:{equal:function(e,t){if(!Ha.equal(e[1],t[1]))return!1;const n=[e[1],e[0]],r=[e[1],e[2]],s=[t[1],t[0]],a=[t[1],t[2]],i=Ya.equal(n,s)&&Ya.equal(r,a),o=Ya.equal(n,a)&&Ya.equal(r,s);return i||o},defaultOptions:{reflex:!1}},circle:{equal:function(e,t){const n=Ha.distanceToPoint(e[0],e[1]),r=Ha.distanceToPoint(t[0],t[1]);return Ha.equal(e[0],t[0])&&sa.equal(n,r)}},point:{equal:Ha.equal}};class du extends d.Component{constructor(){super(...arguments),C(this,"getTypeString",(e=>f.default.isArray(e)?f.default.map(e,this.getTypeString).join(","):"polygon"===e?"polygon-"+this.props.shape.coords.length:e)),C(this,"changeType",(e=>{const t=String(e.target.value).split(","),n=(r=f.default.map(t,uu.getPointCountForType),f.default.reduce(r,(function(e,t){return e+t}),0));var r;const s=function(e,t){const n=t[0][1]-t[0][0],r=t[1][1]-t[1][0];return e*Math.max(n,r)/20}(4,this.refs.graph.props.range),a=180*(.5-1/n),i=f.default.times(n,(function(e){return Ha.rotateDeg([s,0],360*e/n+a)}));this.props.onChange({shape:{type:t,coords:i,options:uu.defaultOptions(t)}})})),C(this,"updateCoords",(()=>{this.props.onChange({shape:this.shape.toJSON()})})),C(this,"setupGraphie",(e=>{this.shape=uu.addMovableShape(e,{editable:!0,snap:e.snap,shape:this.props.shape,onMoveEnd:this.updateCoords})}))}render(){return d.createElement("div",null,d.createElement(tu,{ref:"graph",box:this.props.graph.box,range:this.props.graph.range,labels:this.props.graph.labels,step:this.props.graph.step,gridStep:this.props.graph.gridStep,markings:this.props.graph.markings,backgroundImage:this.props.graph.backgroundImage,onGraphieUpdated:this.setupGraphie}),d.createElement("select",{key:"type-select",value:this.getTypeString(this.props.shape.type),onChange:this.changeType},d.createElement("option",{value:"polygon-3"},"Triangle"),d.createElement("option",{value:"polygon-4"},"Quadrilateral"),d.createElement("option",{value:"polygon-5"},"Pentagon"),d.createElement("option",{value:"polygon-6"},"Hexagon"),d.createElement("option",{value:"line"},"Line"),d.createElement("option",{value:"line,line"},"2 lines"),d.createElement("option",{value:"lineSegment"},"Line segment"),d.createElement("option",{value:"lineSegment,lineSegment"}," ","2 line segments"," "),d.createElement("option",{value:"angle"},"Angle"),d.createElement("option",{value:"circle"},"Circle")))}componentDidMount(){this.setupGraphie(this.refs.graph.graphie())}componentDidUpdate(e){au(e.shape,this.props.shape)||this.refs.graph.reset()}}class mu extends d.Component{constructor(){super(...arguments),C(this,"changeGraph",((e,t)=>{const n=f.default.extend({},this.props.graph,e);this.props.onChange({graph:n},t)})),C(this,"changeStarting",(e=>{const t=f.default.extend({},this.props.starting,e);this.props.onChange({starting:t})})),C(this,"changeTransformer",((e,t)=>{e.transformations&&(e.correct={...this.props.correct,transformations:e.transformations},delete e.transformations),this.props.onChange(e,t)})),C(this,"serialize",(()=>{const e=this.refs.explorer.getEditorJSON();return e.correct=e.answer,delete e.answer,e}))}render(){const e=f.default.extend(function(e,t){const n=(e=e||{}).labels||["x","y"],r=e.range||[[-10,10],[-10,10]],s=e.step||[1,1];return{box:[t,t],labels:n,range:r,step:s,gridStep:e.gridStep||iu(r,s,t),valid:!0,backgroundImage:ou,markings:"grid",showProtractor:!1}}(this.props.graph,340),this.props.graph);return d.createElement("div",null,d.createElement("div",null,d.createElement(ru,{label:"Grade empty answers as wrong:",gradeEmpty:this.props.gradeEmpty,onChange:this.props.onChange}),d.createElement(nu,null,d.createElement("p",null,"We generally do not grade empty answers. This usually works well, but sometimes can result in giving away part of an answer in a multi-part question."),d.createElement("p",null,"If this is a multi-part question (there is another widget), you probably want to enable this option. Otherwise, you should leave it disabled."),d.createElement("p",null,"Confused? Talk to Elizabeth."))),d.createElement("div",null,"Graph settings:"),d.createElement(co,{box:e.box,labels:e.labels,range:e.range,step:e.step,gridStep:e.gridStep,valid:e.valid,backgroundImage:e.backgroundImage,markings:e.markings,showProtractor:e.showProtractor,onChange:this.changeGraph}),d.createElement("div",null,"Transformation settings:"),d.createElement(hu,{ref:"transformationSettings",graphMode:this.props.graphMode,listMode:this.props.listMode,tools:this.props.tools,drawSolutionShape:this.props.drawSolutionShape,onChange:this.props.onChange}),d.createElement("div",null,"Starting location:"),d.createElement(du,{ref:"shapeEditor",graph:e,shape:this.props.starting.shape,onChange:this.changeStarting,setDrawingAreaAvailable:this.props.apiOptions.setDrawingAreaAvailable}),d.createElement("div",null,"Solution transformations:"),d.createElement(su,{ref:"explorer",graph:e,graphMode:this.props.graphMode,listMode:this.props.listMode,gradeEmpty:this.props.gradeEmpty,tools:this.props.tools,drawSolutionShape:this.props.drawSolutionShape,starting:this.props.starting,correct:this.props.starting,transformations:this.props.correct.transformations,onChange:this.changeTransformer,trackInteraction:()=>{}}))}}C(mu,"defaultProps",cu),C(mu,"widgetName","transformer");const{InlineIcon:fu,NumberInput:gu}=e.components,{iconOk:vu,iconRemove:yu}=e.icons,bu=function(e){return e.simplify().asMul().partition()[1].flatten().simplify()};class Eu extends d.Component{constructor(){super(...arguments),C(this,"_checkValidity",(t=>{let{name:n,original:r,sigfigs:s}=t;const a=Mi(n);let i="",o=!0;if(a.parsed&&r){const t=new wi("x"),{unit:n}=a,l=new yi(r,"=",new di(t,n));try{i=function(t,n){return e.displaySigFigs(t,n,-10,!1)}(l.solveLinearEquationForVariable(t).eval(),s),o=function(e,t,n){var r={form:!1,simplify:!1};n=void 0!==n?f.default.extend(r,n):r;var s,a=e.sameVars(t);return a.equal?e.compare(t)?n.form&&!e.sameForm(t)?{equal:!1,message:"Your answer is not in the correct form."}:n.simplify&&!e.isSimplified()?{equal:!1,message:"Your answer is not fully expanded and simplified."}:{equal:!0,message:null}:{equal:!1,message:null}:(s=a.equalIgnoringCase?"Check your variables; one or more are using the wrong case (upper or lower).":"Check your variables; you may have used the wrong letter for one or more of them.",{equal:!1,wrongVariableCase:a.equalIgnoringCase,wrongVariableNames:!a.equalIgnoringCase,message:s})}(bu(r),bu(n)).equal}catch(e){o=!1}}else o=!1;this.setState({valid:o,solvedExample:i})}))}UNSAFE_componentWillMount(){this._checkValidity(this.props)}UNSAFE_componentWillReceiveProps(e){this._checkValidity(e)}render(){let e;return e=this.state.valid?d.createElement("span",null,d.createElement("span",{className:"unit-example-okay"},d.createElement(fu,vu)),this.state.solvedExample):d.createElement("span",{className:"unit-example-not-okay"},d.createElement(fu,yu)),d.createElement("div",null,e," ",this.props.name)}}class wu extends d.Component{constructor(t){var n;super(t),n=this,C(this,"parsed",void 0),C(this,"groupId",void 0),C(this,"original",void 0),C(this,"change",(function(){for(var t=arguments.length,r=new Array(t),s=0;s<t;s++)r[s]=arguments[s];return e.Changeable.change.apply(n,r)})),C(this,"handleAcceptingUnitsChange",(e=>{const t=e.target.value.split(",").map((e=>e.trim())).filter((e=>""!==e));this.change({acceptingUnits:t})})),C(this,"handleSigfigChange",(e=>{this.change({sigfigs:e})})),C(this,"_checkSigfigValidity",(e=>e>0&&e<=10)),C(this,"_setAccepting",(e=>{this.change({accepting:e})})),C(this,"_doOriginal",(e=>{const t=Mi(e.value);this.parsed=!1,t.parsed&&"unitMagnitude"===t.type&&(this.original=t.expr,this.parsed=!0)})),C(this,"onChange",(e=>{this.props.onChange({value:e.target.value})})),C(this,"getSaveWarnings",(()=>{const{value:e,accepting:t,acceptingUnits:n}=this.props,r=[];return Mi(e).parsed||r.push("Answer did not parse"),"some"===t&&0===n.length&&r.push("There are no accepted units"),r})),C(this,"serialize",(()=>e.EditorJsonify.serialize.call(this))),this.groupId=f.default.uniqueId("accepting"),this._doOriginal(t)}UNSAFE_componentWillReceiveProps(e){this._doOriginal(e)}render(){const{acceptingUnits:e=[],accepting:t}=this.props;let n=null;if("some"===t){const t=e.map(((e,t)=>d.createElement(Eu,{name:e,original:this.original||null,sigfigs:this.props.sigfigs,key:t})));n=d.createElement("div",null,d.createElement("input",{type:"text",defaultValue:e.join(", "),onChange:this.handleAcceptingUnitsChange})," ","(comma-separated)",t)}return d.createElement("div",{className:"unit-editor"},d.createElement("div",null,d.createElement("input",{value:this.props.value,className:"unit-editor-canonical",onChange:this.onChange})," ",this.parsed?d.createElement("span",{className:"unit-example-okay"},d.createElement(fu,vu)):d.createElement("span",{className:"unit-example-not-okay"},d.createElement(fu,yu))),d.createElement("div",null,"Significant Figures:"," ",d.createElement(gu,{value:this.props.sigfigs,onChange:this.handleSigfigChange,checkValidity:this._checkSigfigValidity,useArrowKeys:!0})),d.createElement("div",null,d.createElement("label",null,d.createElement("input",{type:"radio",name:this.groupId,onChange:()=>this._setAccepting("all"),checked:"all"===this.props.accepting})," Any equivalent unit "),d.createElement("label",null,d.createElement("input",{type:"radio",name:this.groupId,onChange:()=>this._setAccepting("some"),checked:"some"===this.props.accepting})," Only these units ")),n)}}C(wu,"propTypes",{...e.Changeable.propTypes,value:g.default.string,acceptingUnits:g.default.arrayOf(g.default.string),accepting:g.default.oneOf(["all","some"]),sigfigs:g.default.number}),C(wu,"widgetName","unit-input"),C(wu,"defaultProps",{value:"5x10^5 kg m / s^2",accepting:"all",sigfigs:3});const{InfoTip:xu}=e.components,Cu=/khanacademy\.org\/.*\/v\/(.*)$/;function Su(e){const t=Cu.exec(e);return t?t[1]:e}class ku extends d.Component{constructor(){var t;super(...arguments),t=this,C(this,"_handleUrlChange",(e=>{this.props.onChange({location:Su(e)})})),C(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),C(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){return d.createElement("div",null,d.createElement("label",null,"KA Video Slug:"," ",d.createElement(Ls,{value:this.props.location,style:{width:290},onChange:this._handleUrlChange}),d.createElement(xu,null,"KA video URLs will be converted to just the slug.")))}}C(ku,"propTypes",{...e.Changeable.propTypes,location:g.default.string,onChange:g.default.func}),C(ku,"widgetName","video"),C(ku,"defaultProps",{location:""});var Nu=[zs,js,$s,Js,ei,ti,ri,Gi,Qi,to,xo,Co,To,Ro,Fo,nl,cl,pp,Cp,Tp,Mp,zp,Up,$p,sh,oh,ph,mh,fh,kh,Ih,Wh,jh,Hh,Jh,eu,mu,wu,ku,Ah];class Tu extends d.Component{constructor(){super(...arguments),C(this,"focus",(()=>(this.refs.input.focus(),!0))),C(this,"changeValue",(e=>{this.props.onChange(e.target.value)}))}render(){return d.createElement("input",{ref:"input",value:this.props.value||"",onChange:this.changeValue})}}class _u extends d.Component{constructor(){var t;super(...arguments),t=this,C(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),C(this,"getUserInput",(()=>this.props.value)),C(this,"focus",(()=>(this.refs.input.focus(),!0))),C(this,"simpleValidate",(e=>_u.validate(this.getUserInput(),e)))}static validate(e,t){return""===e?{type:"invalid",message:"It looks like you haven't answered all of the question yet."}:e===t.correct?{type:"points",earned:1,total:1,message:null}:{type:"points",earned:0,total:1,message:null}}render(){return d.createElement(Tu,{ref:"input",value:this.props.value,onChange:this.change("value")})}}C(_u,"propTypes",{...e.Changeable.propTypes,value:g.default.string}),C(_u,"defaultProps",{value:""});var Ou={name:"example-widget",displayName:"Example Widget",defaultAlignment:"inline-block",hidden:!0,widget:_u};const Mu=e.PerseusMarkdown.parse,Au=e.PerseusMarkdown.basicOutput;class Pu extends d.Component{constructor(){var t;super(...arguments),t=this,C(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),C(this,"toJSON",(()=>({}))),C(this,"focus",(()=>(this.refs.input.focus(),!0))),C(this,"simpleValidate",(e=>Pu.validate(this.toJSON(),e)))}static validate(e,t){return{type:"points",earned:0,total:0,message:null}}render(){const e=Mu(this.props.value),t=Au(e);return d.createElement("div",null,t)}}C(Pu,"propTypes",{...e.Changeable.propTypes,value:g.default.string}),C(Pu,"defaultProps",{value:""});var Du=[Za,Ou,{name:"simple-markdown-tester",displayName:"Simple Markdown Tester",hidden:!0,widget:Pu,transform:f.default.identity}],Iu=[...e.widgets,...Du];e.Widgets.registerEditors(Nu),e.Widgets.registerWidgets(Iu),exports.Perseus=u,exports.AllEditors=Nu,exports.AllWidgets=Iu,exports.ArticleDiff=Tr,exports.ArticleEditor=Jn,exports.DeviceFramer=N,exports.Editor=Un,exports.EditorPage=Yr,exports.IframeContentRenderer=jn,exports.ItemDiff=Or,exports.MultiRendererEditor=_s,exports.StatefulArticleEditor=Ms,exports.StatefulEditorPage=Ps,exports.StructuredItemDiff=Dr,exports.ViewportResizer=rr,exports.i18n=ns;
|
|
9
|
+
*/Ne=Ce,"production"===process.env.NODE_ENV?Ne.exports=function(){if(xe)return Se;xe=1;var e="function"==typeof Symbol&&Symbol.for,t=e?Symbol.for("react.element"):60103,n=e?Symbol.for("react.portal"):60106,r=e?Symbol.for("react.fragment"):60107,s=e?Symbol.for("react.strict_mode"):60108,a=e?Symbol.for("react.profiler"):60114,i=e?Symbol.for("react.provider"):60109,o=e?Symbol.for("react.context"):60110,l=e?Symbol.for("react.async_mode"):60111,c=e?Symbol.for("react.concurrent_mode"):60111,p=e?Symbol.for("react.forward_ref"):60112,h=e?Symbol.for("react.suspense"):60113,u=e?Symbol.for("react.suspense_list"):60120,d=e?Symbol.for("react.memo"):60115,m=e?Symbol.for("react.lazy"):60116,f=e?Symbol.for("react.block"):60121,g=e?Symbol.for("react.fundamental"):60117,v=e?Symbol.for("react.responder"):60118,y=e?Symbol.for("react.scope"):60119;function b(e){if("object"==typeof e&&null!==e){var u=e.$$typeof;switch(u){case t:switch(e=e.type){case l:case c:case r:case a:case s:case h:return e;default:switch(e=e&&e.$$typeof){case o:case p:case m:case d:case i:return e;default:return u}}case n:return u}}}function E(e){return b(e)===c}return Se.AsyncMode=l,Se.ConcurrentMode=c,Se.ContextConsumer=o,Se.ContextProvider=i,Se.Element=t,Se.ForwardRef=p,Se.Fragment=r,Se.Lazy=m,Se.Memo=d,Se.Portal=n,Se.Profiler=a,Se.StrictMode=s,Se.Suspense=h,Se.isAsyncMode=function(e){return E(e)||b(e)===l},Se.isConcurrentMode=E,Se.isContextConsumer=function(e){return b(e)===o},Se.isContextProvider=function(e){return b(e)===i},Se.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===t},Se.isForwardRef=function(e){return b(e)===p},Se.isFragment=function(e){return b(e)===r},Se.isLazy=function(e){return b(e)===m},Se.isMemo=function(e){return b(e)===d},Se.isPortal=function(e){return b(e)===n},Se.isProfiler=function(e){return b(e)===a},Se.isStrictMode=function(e){return b(e)===s},Se.isSuspense=function(e){return b(e)===h},Se.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===r||e===c||e===a||e===s||e===h||e===u||"object"==typeof e&&null!==e&&(e.$$typeof===m||e.$$typeof===d||e.$$typeof===i||e.$$typeof===o||e.$$typeof===p||e.$$typeof===g||e.$$typeof===v||e.$$typeof===y||e.$$typeof===f)},Se.typeOf=b,Se}():Ne.exports=(ke||(ke=1,"production"!==process.env.NODE_ENV&&function(){var e="function"==typeof Symbol&&Symbol.for,t=e?Symbol.for("react.element"):60103,n=e?Symbol.for("react.portal"):60106,r=e?Symbol.for("react.fragment"):60107,s=e?Symbol.for("react.strict_mode"):60108,a=e?Symbol.for("react.profiler"):60114,i=e?Symbol.for("react.provider"):60109,o=e?Symbol.for("react.context"):60110,l=e?Symbol.for("react.async_mode"):60111,c=e?Symbol.for("react.concurrent_mode"):60111,p=e?Symbol.for("react.forward_ref"):60112,h=e?Symbol.for("react.suspense"):60113,u=e?Symbol.for("react.suspense_list"):60120,d=e?Symbol.for("react.memo"):60115,m=e?Symbol.for("react.lazy"):60116,f=e?Symbol.for("react.block"):60121,g=e?Symbol.for("react.fundamental"):60117,v=e?Symbol.for("react.responder"):60118,y=e?Symbol.for("react.scope"):60119;function b(e){if("object"==typeof e&&null!==e){var u=e.$$typeof;switch(u){case t:var f=e.type;switch(f){case l:case c:case r:case a:case s:case h:return f;default:var g=f&&f.$$typeof;switch(g){case o:case p:case m:case d:case i:return g;default:return u}}case n:return u}}}var E=l,w=c,x=o,C=i,S=t,k=p,N=r,T=m,_=d,O=n,M=a,A=s,P=h,D=!1;function I(e){return b(e)===c}Te.AsyncMode=E,Te.ConcurrentMode=w,Te.ContextConsumer=x,Te.ContextProvider=C,Te.Element=S,Te.ForwardRef=k,Te.Fragment=N,Te.Lazy=T,Te.Memo=_,Te.Portal=O,Te.Profiler=M,Te.StrictMode=A,Te.Suspense=P,Te.isAsyncMode=function(e){return D||(D=!0,console.warn("The ReactIs.isAsyncMode() alias has been deprecated, and will be removed in React 17+. Update your code to use ReactIs.isConcurrentMode() instead. It has the exact same API.")),I(e)||b(e)===l},Te.isConcurrentMode=I,Te.isContextConsumer=function(e){return b(e)===o},Te.isContextProvider=function(e){return b(e)===i},Te.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===t},Te.isForwardRef=function(e){return b(e)===p},Te.isFragment=function(e){return b(e)===r},Te.isLazy=function(e){return b(e)===m},Te.isMemo=function(e){return b(e)===d},Te.isPortal=function(e){return b(e)===n},Te.isProfiler=function(e){return b(e)===a},Te.isStrictMode=function(e){return b(e)===s},Te.isSuspense=function(e){return b(e)===h},Te.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===r||e===c||e===a||e===s||e===h||e===u||"object"==typeof e&&null!==e&&(e.$$typeof===m||e.$$typeof===d||e.$$typeof===i||e.$$typeof===o||e.$$typeof===p||e.$$typeof===g||e.$$typeof===v||e.$$typeof===y||e.$$typeof===f)},Te.typeOf=b}()),Te);var _e=Ce.exports,Oe={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},Me={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},Ae={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},Pe={};function De(e){return _e.isMemo(e)?Ae:Pe[e.$$typeof]||Oe}Pe[_e.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},Pe[_e.Memo]=Ae;var Ie=Object.defineProperty,Re=Object.getOwnPropertyNames,ze=Object.getOwnPropertySymbols,Le=Object.getOwnPropertyDescriptor,Fe=Object.getPrototypeOf,Ue=Object.prototype;var qe=function e(t,n,r){if("string"!=typeof n){if(Ue){var s=Fe(n);s&&s!==Ue&&e(t,s,r)}var a=Re(n);ze&&(a=a.concat(ze(n)));for(var i=De(t),o=De(n),l=0;l<a.length;++l){var c=a[l];if(!(Me[c]||r&&r[c]||o&&o[c]||i&&i[c])){var p=Le(n,c);try{Ie(t,c,p)}catch(e){}}}}return t},We=function(e){var t=le();return t.displayName=e,t},Ve=We("Router-History"),je=We("Router"),Be=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen((function(e){n._isMounted?n.setState({location:e}):n._pendingLocation=e}))),n}D(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){this._isMounted=!0,this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&(this.unlisten(),this._isMounted=!1,this._pendingLocation=null)},n.render=function(){return d.default.createElement(je.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},d.default.createElement(Ve.Provider,{children:this.props.children||null,value:this.props.history}))},t}(d.default.Component);"production"!==process.env.NODE_ENV&&(Be.propTypes={children:f.default.node,history:f.default.object.isRequired,staticContext:f.default.object},Be.prototype.componentDidUpdate=function(e){"production"!==process.env.NODE_ENV&&L(e.history===this.props.history,"You cannot change <Router history>")});var $e=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return(t=e.call.apply(e,[this].concat(r))||this).history=ae(t.props),t}return D(t,e),t.prototype.render=function(){return d.default.createElement(Be,{history:this.history,children:this.props.children})},t}(d.default.Component);if("production"!==process.env.NODE_ENV&&($e.propTypes={initialEntries:f.default.array,initialIndex:f.default.number,getUserConfirmation:f.default.func,keyLength:f.default.number,children:f.default.node},$e.prototype.componentDidMount=function(){"production"!==process.env.NODE_ENV&&L(!this.props.history,"<MemoryRouter> ignores the history prop. To use a custom history, use `import { Router }` instead of `import { MemoryRouter as Router }`.")}),d.default.Component,"production"!==process.env.NODE_ENV){var He=f.default.oneOfType([f.default.func,f.default.string]);f.default.bool,He.isRequired}"production"!==process.env.NODE_ENV&&(f.default.bool,f.default.string,f.default.oneOfType([f.default.string,f.default.object]).isRequired);var Ge={},Ye=0;function Ke(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var n=t,r=n.path,s=n.exact,a=void 0!==s&&s,i=n.strict,o=void 0!==i&&i,l=n.sensitive,c=void 0!==l&&l;return[].concat(r).reduce((function(t,n){if(!n&&""!==n)return null;if(t)return t;var r=function(e,t){var n=""+t.end+t.strict+t.sensitive,r=Ge[n]||(Ge[n]={});if(r[e])return r[e];var s=[],a={regexp:pe.exports(e,s,t),keys:s};return Ye<1e4&&(r[e]=a,Ye++),a}(n,{end:a,strict:o,sensitive:c}),s=r.regexp,i=r.keys,l=s.exec(e);if(!l)return null;var p=l[0],h=l.slice(1),u=e===p;return a&&!u?null:{path:n,url:"/"===n&&""===p?"/":p,isExact:u,params:i.reduce((function(e,t,n){return e[t.name]=h[n],e}),{})}}),null)}function Je(e){return 0===d.default.Children.count(e)}function Xe(e,t,n){var r=e(t);return"production"!==process.env.NODE_ENV&&L(void 0!==r,"You returned `undefined` from the `children` function of <Route"+(n?' path="'+n+'"':"")+">, but you should have returned a React element or `null`"),r||null}var Ze=function(e){function t(){return e.apply(this,arguments)||this}return D(t,e),t.prototype.render=function(){var e=this;return d.default.createElement(je.Consumer,null,(function(t){t||("production"!==process.env.NODE_ENV?q(!1,"You should not use <Route> outside a <Router>"):q(!1));var n=e.props.location||t.location,r=A({},t,{location:n,match:e.props.computedMatch?e.props.computedMatch:e.props.path?Ke(n.pathname,e.props):t.match}),s=e.props,a=s.children,i=s.component,o=s.render;return Array.isArray(a)&&Je(a)&&(a=null),d.default.createElement(je.Provider,{value:r},r.match?a?"function"==typeof a?"production"!==process.env.NODE_ENV?Xe(a,r,e.props.path):a(r):a:i?d.default.createElement(i,r):o?o(r):null:"function"==typeof a?"production"!==process.env.NODE_ENV?Xe(a,r,e.props.path):a(r):null)}))},t}(d.default.Component);function Qe(e){return"/"===e.charAt(0)?e:"/"+e}function et(e,t){if(!e)return t;var n=Qe(e);return 0!==t.pathname.indexOf(n)?t:A({},t,{pathname:t.pathname.substr(n.length)})}function tt(e){return"string"==typeof e?e:H(e)}function nt(e){return function(){"production"!==process.env.NODE_ENV?q(!1,"You cannot %s with <StaticRouter>"):q(!1)}}function rt(){}"production"!==process.env.NODE_ENV&&(Ze.propTypes={children:f.default.oneOfType([f.default.func,f.default.node]),component:function(e,t){if(e[t]&&!Ce.exports.isValidElementType(e[t]))return new Error("Invalid prop 'component' supplied to 'Route': the prop is not a valid React component")},exact:f.default.bool,location:f.default.object,path:f.default.oneOfType([f.default.string,f.default.arrayOf(f.default.string)]),render:f.default.func,sensitive:f.default.bool,strict:f.default.bool},Ze.prototype.componentDidMount=function(){"production"!==process.env.NODE_ENV&&L(!(this.props.children&&!Je(this.props.children)&&this.props.component),"You should not use <Route component> and <Route children> in the same route; <Route component> will be ignored"),"production"!==process.env.NODE_ENV&&L(!(this.props.children&&!Je(this.props.children)&&this.props.render),"You should not use <Route render> and <Route children> in the same route; <Route render> will be ignored"),"production"!==process.env.NODE_ENV&&L(!(this.props.component&&this.props.render),"You should not use <Route component> and <Route render> in the same route; <Route render> will be ignored")},Ze.prototype.componentDidUpdate=function(e){"production"!==process.env.NODE_ENV&&L(!(this.props.location&&!e.location),'<Route> elements should not change from uncontrolled to controlled (or vice versa). You initially used no "location" prop and then provided one on a subsequent render.'),"production"!==process.env.NODE_ENV&&L(!(!this.props.location&&e.location),'<Route> elements should not change from controlled to uncontrolled (or vice versa). You provided a "location" prop initially but omitted it on a subsequent render.')});var st=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return(t=e.call.apply(e,[this].concat(r))||this).handlePush=function(e){return t.navigateTo(e,"PUSH")},t.handleReplace=function(e){return t.navigateTo(e,"REPLACE")},t.handleListen=function(){return rt},t.handleBlock=function(){return rt},t}D(t,e);var n=t.prototype;return n.navigateTo=function(e,t){var n=this.props,r=n.basename,s=void 0===r?"":r,a=n.context,i=void 0===a?{}:a;i.action=t,i.location=function(e,t){return e?A({},t,{pathname:Qe(e)+t.pathname}):t}(s,G(e)),i.url=tt(i.location)},n.render=function(){var e=this.props,t=e.basename,n=void 0===t?"":t,r=e.context,s=void 0===r?{}:r,a=e.location,i=void 0===a?"/":a,o=M(e,["basename","context","location"]),l={createHref:function(e){return Qe(n+tt(e))},action:"POP",location:et(n,G(i)),push:this.handlePush,replace:this.handleReplace,go:nt(),goBack:nt(),goForward:nt(),listen:this.handleListen,block:this.handleBlock};return d.default.createElement(Be,A({},o,{history:l,staticContext:s}))},t}(d.default.Component);"production"!==process.env.NODE_ENV&&(st.propTypes={basename:f.default.string,context:f.default.object,location:f.default.oneOfType([f.default.string,f.default.object])},st.prototype.componentDidMount=function(){"production"!==process.env.NODE_ENV&&L(!this.props.history,"<StaticRouter> ignores the history prop. To use a custom history, use `import { Router }` instead of `import { StaticRouter as Router }`.")});var at=function(e){function t(){return e.apply(this,arguments)||this}return D(t,e),t.prototype.render=function(){var e=this;return d.default.createElement(je.Consumer,null,(function(t){t||("production"!==process.env.NODE_ENV?q(!1,"You should not use <Switch> outside a <Router>"):q(!1));var n,r,s=e.props.location||t.location;return d.default.Children.forEach(e.props.children,(function(e){if(null==r&&d.default.isValidElement(e)){n=e;var a=e.props.path||e.props.from;r=a?Ke(s.pathname,A({},e.props,{path:a})):t.match}})),r?d.default.cloneElement(n,{location:s,computedMatch:r}):null}))},t}(d.default.Component);if("production"!==process.env.NODE_ENV&&(at.propTypes={children:f.default.node,location:f.default.object},at.prototype.componentDidUpdate=function(e){"production"!==process.env.NODE_ENV&&L(!(this.props.location&&!e.location),'<Switch> elements should not change from uncontrolled to controlled (or vice versa). You initially used no "location" prop and then provided one on a subsequent render.'),"production"!==process.env.NODE_ENV&&L(!(!this.props.location&&e.location),'<Switch> elements should not change from controlled to uncontrolled (or vice versa). You provided a "location" prop initially but omitted it on a subsequent render.')}),d.default.useContext,"production"!==process.env.NODE_ENV&&"undefined"!=typeof window){var it=window,ot="__react_router_build__",lt={cjs:"CommonJS",esm:"ES modules",umd:"UMD"};if(it[ot]&&"esm"!==it[ot]){var ct=lt[it[ot]];throw new Error("You are loading the "+lt.esm+" build of React Router on a page that is already running the "+ct+" build, so things won't work right.")}it[ot]="esm"}var pt=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return(t=e.call.apply(e,[this].concat(r))||this).history=Z(t.props),t}return D(t,e),t.prototype.render=function(){return d.default.createElement(Be,{history:this.history,children:this.props.children})},t}(d.default.Component);"production"!==process.env.NODE_ENV&&(pt.propTypes={basename:f.default.string,children:f.default.node,forceRefresh:f.default.bool,getUserConfirmation:f.default.func,keyLength:f.default.number},pt.prototype.componentDidMount=function(){"production"!==process.env.NODE_ENV&&L(!this.props.history,"<BrowserRouter> ignores the history prop. To use a custom history, use `import { Router }` instead of `import { BrowserRouter as Router }`.")});var ht=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return(t=e.call.apply(e,[this].concat(r))||this).history=re(t.props),t}return D(t,e),t.prototype.render=function(){return d.default.createElement(Be,{history:this.history,children:this.props.children})},t}(d.default.Component);"production"!==process.env.NODE_ENV&&(ht.propTypes={basename:f.default.string,children:f.default.node,getUserConfirmation:f.default.func,hashType:f.default.oneOf(["hashbang","noslash","slash"])},ht.prototype.componentDidMount=function(){"production"!==process.env.NODE_ENV&&L(!this.props.history,"<HashRouter> ignores the history prop. To use a custom history, use `import { Router }` instead of `import { HashRouter as Router }`.")});var ut=function(e,t){return"function"==typeof e?e(t):e},dt=function(e,t){return"string"==typeof e?G(e,null,null,t):e},mt=function(e){return e},ft=d.default.forwardRef;void 0===ft&&(ft=mt);var gt=ft((function(e,t){var n=e.innerRef,r=e.navigate,s=e.onClick,a=M(e,["innerRef","navigate","onClick"]),i=a.target,o=A({},a,{onClick:function(e){try{s&&s(e)}catch(t){throw e.preventDefault(),t}e.defaultPrevented||0!==e.button||i&&"_self"!==i||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)||(e.preventDefault(),r())}});return o.ref=mt!==ft&&t||n,d.default.createElement("a",o)}));"production"!==process.env.NODE_ENV&&(gt.displayName="LinkAnchor");var vt=ft((function(e,t){var n=e.component,r=void 0===n?gt:n,s=e.replace,a=e.to,i=e.innerRef,o=M(e,["component","replace","to","innerRef"]);return d.default.createElement(je.Consumer,null,(function(e){e||("production"!==process.env.NODE_ENV?q(!1,"You should not use <Link> outside a <Router>"):q(!1));var n=e.history,l=dt(ut(a,e.location),e.location),c=l?n.createHref(l):"",p=A({},o,{href:c,navigate:function(){var t=ut(a,e.location),r=H(e.location)===H(dt(t));(s||r?n.replace:n.push)(t)}});return mt!==ft?p.ref=t||i:p.innerRef=i,d.default.createElement(r,p)}))}));if("production"!==process.env.NODE_ENV){var yt=f.default.oneOfType([f.default.string,f.default.object,f.default.func]),bt=f.default.oneOfType([f.default.string,f.default.func,f.default.shape({current:f.default.any})]);vt.displayName="Link",vt.propTypes={innerRef:bt,onClick:f.default.func,replace:f.default.bool,target:f.default.string,to:yt.isRequired}}var Et=function(e){return e},wt=d.default.forwardRef;void 0===wt&&(wt=Et);var xt=wt((function(e,t){var n=e["aria-current"],r=void 0===n?"page":n,s=e.activeClassName,a=void 0===s?"active":s,i=e.activeStyle,o=e.className,l=e.exact,c=e.isActive,p=e.location,h=e.sensitive,u=e.strict,m=e.style,f=e.to,g=e.innerRef,v=M(e,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return d.default.createElement(je.Consumer,null,(function(e){e||("production"!==process.env.NODE_ENV?q(!1,"You should not use <NavLink> outside a <Router>"):q(!1));var n=p||e.location,s=dt(ut(f,n),n),y=s.pathname,b=y&&y.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),E=b?Ke(n.pathname,{path:b,exact:l,sensitive:h,strict:u}):null,w=!!(c?c(E,n):E),x="function"==typeof o?o(w):o,C="function"==typeof m?m(w):m;w&&(x=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.filter((function(e){return e})).join(" ")}(x,a),C=A({},C,i));var S=A({"aria-current":w&&r||null,className:x,style:C,to:s},v);return Et!==wt?S.ref=t||g:S.innerRef=g,d.default.createElement(vt,S)}))}));if("production"!==process.env.NODE_ENV){xt.displayName="NavLink";var Ct=f.default.oneOf(["page","step","location","date","time","true","false"]);xt.propTypes=A({},vt.propTypes,{"aria-current":Ct,activeClassName:f.default.string,activeStyle:f.default.object,className:f.default.oneOfType([f.default.string,f.default.func]),exact:f.default.bool,isActive:f.default.func,location:f.default.object,sensitive:f.default.bool,strict:f.default.bool,style:f.default.oneOfType([f.default.object,f.default.func])})}function St(e){const t=[];if(!e)return t;if(Array.isArray(e))for(const n of e)t.push.apply(t,St(n));else t.push(e);return t}function kt(e){const t=[],n=[];if(!e)return{style:{},className:""};const r="undefined"!=typeof global&&global.SNAPSHOT_INLINE_APHRODITE;St(e).forEach((e=>{const s=e._definition;if(null!=s)if(r){const e={};for(const[t,n]of Object.entries(s))e[t.replace(/-[a-z]/g,(e=>e[1].toUpperCase()))]=n;n.push(e)}else t.push(e);else n.push(e)}));const s=Object.assign.apply(Object,[{}].concat(n));if(n.length>0&&!r){const e=o.StyleSheet.create({inlineStyles:s});t.push(e.inlineStyles)}return{style:r?s:{},className:o.css.apply(void 0,t)}}const Nt=["children","style","tag","testId"],Tt=/^h[1-6]$/,_t=o.StyleSheet.create({text:{WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale"},header:{marginTop:0,marginBottom:0}});class Ot extends u.Component{render(){const e=this.props,{children:t,style:n,tag:r,testId:s}=e,a=M(e,Nt),i=Tt.test(r),o=kt([_t.text,i&&_t.header,n]);return u.createElement(r,A({},a,{style:o.style,className:o.className,"data-test-id":s}),t)}}Ot.defaultProps={tag:"span"};const Mt=["className","style"];function At(e,t){return function(n){const{className:r,style:s}=n,a=M(n,Mt),i="string"==typeof e?Pt[e]:null,{className:o,style:l}=kt([i,t,s]);return u.createElement(e,A({},a,{className:[o,r].filter(Boolean).join(" "),style:l}))}}const Pt=o.StyleSheet.create({button:{margin:0,"::-moz-focus-inner":{border:0}}}),Dt=["testId","tag"],It=o.StyleSheet.create({default:{alignItems:"stretch",borderWidth:0,borderStyle:"solid",boxSizing:"border-box",display:"flex",flexDirection:"column",margin:0,padding:0,position:"relative",zIndex:0,minHeight:0,minWidth:0}}),Rt=At("div",It.default),zt=At("article",It.default),Lt=At("aside",It.default),Ft=At("nav",It.default),Ut=At("section",It.default);class qt extends u.Component{render(){const e=this.props,{testId:t,tag:n}=e,r=A({},M(e,Dt),{"data-test-id":t});switch(n){case"article":return u.createElement(zt,r);case"aside":return u.createElement(Lt,r);case"nav":return u.createElement(Ft,r);case"section":return u.createElement(Ut,r);case"div":return u.createElement(Rt,r);default:throw Error(`${n} is not an allowed value for the 'tag' prop`)}}}qt.defaultProps={tag:"div"};const Wt=require("flow-enums-runtime")({Root:"root",Initial:"initial",Standard:"standard"}),Vt=u.createContext(Wt.Root);class jt extends u.Component{constructor(...e){super(...e),this.state={mounted:!1},this._isTheRootComponent=!1}componentDidMount(){this._isTheRootComponent&&this.setState({mounted:!0})}_renderAsRootComponent(){const{mounted:e}=this.state,{children:t,placeholder:n}=this.props;return this._isTheRootComponent=!0,e?u.createElement(Vt.Provider,{value:Wt.Standard},t()):n?u.createElement(Vt.Provider,{value:Wt.Initial},n()):null}_maybeRender(e){const{children:t,placeholder:n}=this.props;switch(e){case Wt.Root:return this._renderAsRootComponent();case Wt.Initial:return n?n():null;case Wt.Standard:return t()}return console.log(`We got a render state we don't understand: "${JSON.stringify(e)}"`),this._maybeRender(Wt.Root)}render(){return u.createElement(Vt.Consumer,null,(e=>this._maybeRender(e)))}}class Bt{constructor(e){this.get=e=>{const t=e.toLowerCase();if(!this._hasValidIdChars(e))throw new Error(`Invalid identifier key: ${e}`);return`${this._uniqueFactoryName}-${t}`};const t=(e="string"==typeof e?e:"").toLowerCase();if(!this._hasValidIdChars(t))throw new Error(`Invalid factory scope: ${e}`);this._uniqueFactoryName=`uid-${t}-${Bt._factoryUniquenessCounter++}`}_hasValidIdChars(e){if("string"!=typeof e)return!1;const t=e.replace(/[^\d\w-]/g,"-");return e===t}}Bt._factoryUniquenessCounter=0;class $t{get(e){return e}}$t.Default=new $t;var Ht=$t.Default;class Gt extends u.Component{_performRender(e){const{children:t,mockOnFirstRender:n,scope:r}=this.props;return e?n?t(Ht):null:(this._idFactory||(this._idFactory=new Bt(r)),t(this._idFactory))}render(){return u.createElement(jt,{placeholder:()=>this._performRender(!0)},(()=>this._performRender(!1)))}}class Yt extends u.Component{renderChildren(e){const{id:t,children:n}=this.props,r=e?e.get(Yt.defaultId):t;if(!r)throw new Error("Did not get an identifier factory nor a id prop");return n(r)}render(){const{id:e,scope:t}=this.props;return e?this.renderChildren():u.createElement(Gt,{scope:t,mockOnFirstRender:!0},(e=>this.renderChildren(e)))}}Yt.defaultId="wb-id";const Kt=/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i,Jt=/^#([0-9a-f])([0-9a-f])([0-9a-f])$/i,Xt=/^rgba?\(\s*(\d+),\s*(\d+),\s*(\d+)(?:,\s*([\d.]+))?\s*\)$/i,Zt=e=>{if("string"!=typeof e)throw new Error(`Failed to parse color: ${e}`);const t=e.match(Jt);if(t)return{r:parseInt(`${t[1]}${t[1]}`,16),g:parseInt(`${t[2]}${t[2]}`,16),b:parseInt(`${t[3]}${t[3]}`,16),a:1};const n=e.match(Kt);if(n)return{r:parseInt(n[1],16),g:parseInt(n[2],16),b:parseInt(n[3],16),a:1};const r=e.match(Xt);if(r)return{r:parseFloat(r[1]),g:parseFloat(r[2]),b:parseFloat(r[3]),a:r[4]?parseFloat(r[4]):1};throw new Error(`Failed to parse color: ${e}`)},Qt=e=>{const t=Math.round(e.r),n=Math.round(e.g),r=Math.round(e.b);if(1===e.a){const e=e=>{const t=e.toString(16);return 1===t.length?t+t:t};return`#${e(t)}${e(n)}${e(r)}`}return`rgba(${t},${n},${r},${e.a.toFixed(2)})`},en=(e,t)=>{if(t<0||t>1)throw new Error("Percentage must be between 0 and 1");const n=Zt(e);return Qt(A({},n,{a:n.a*t}))},tn=(e,t)=>{const n=Zt(e),r=Zt(t);return Qt({r:n.r*n.a+r.r*(1-n.a),g:n.g*n.a+r.g*(1-n.a),b:n.b*n.a+r.b*(1-n.a),a:r.a})},nn={blue:"#1865f2",purple:"#9059ff",green:"#00a60e",gold:"#ffb100",red:"#d92916",offBlack:"#21242c",offBlack64:en("#21242c",.64),offBlack50:en("#21242c",.5),offBlack32:en("#21242c",.32),offBlack16:en("#21242c",.16),offBlack8:en("#21242c",.08),offWhite:"#f7f8fa",white:"#ffffff",white64:en("#ffffff",.64),white50:en("#ffffff",.5),darkBlue:"#0a2a66",teal:"#14bf96",lightBlue:"#37c5fd",pink:"#fa50ae"},rn={controlDefault:nn.blue,controlDestructive:nn.red},sn=e=>{switch(e){case"link":return{triggerOnEnter:!0,triggerOnSpace:!1};case"checkbox":case"radio":case"listbox":case"option":return{triggerOnEnter:!1,triggerOnSpace:!0};default:return{triggerOnEnter:!0,triggerOnSpace:!0}}},an={onClick:()=>{},onMouseEnter:()=>{},onMouseLeave:()=>{},onMouseDown:()=>{},onMouseUp:()=>{},onDragStart:()=>{},onTouchStart:()=>{},onTouchEnd:()=>{},onTouchCancel:()=>{},onKeyDown:()=>{},onKeyUp:()=>{},tabIndex:0},on=13,ln=32,cn={hovered:!1,focused:!1,pressed:!1,waiting:!1};class pn extends u.Component{static getDerivedStateFromProps(e,t){return e.disabled?A({},cn,{focused:t.focused}):null}constructor(e){super(e),this.handleClick=e=>{const{onClick:t,beforeNav:n,safeWithNav:r}=this.props;this.enterClick||((t||n||r)&&(this.waitingForClick=!1),this.runCallbackAndMaybeNavigate(e))},this.handleMouseEnter=e=>{1===e.buttons?(this.dragging=!0,this.setState({pressed:!0})):this.waitingForClick||this.setState({hovered:!0})},this.handleMouseLeave=()=>{this.waitingForClick||(this.dragging=!1,this.setState({hovered:!1,pressed:!1,focused:!1}))},this.handleMouseDown=()=>{this.setState({pressed:!0})},this.handleMouseUp=e=>{this.dragging&&(this.dragging=!1,this.handleClick(e)),this.setState({pressed:!1,focused:!1})},this.handleDragStart=e=>{this.dragging=!0,e.preventDefault()},this.handleTouchStart=()=>{this.setState({pressed:!0})},this.handleTouchEnd=()=>{this.setState({pressed:!1}),this.waitingForClick=!0},this.handleTouchCancel=()=>{this.setState({pressed:!1}),this.waitingForClick=!0},this.handleKeyDown=e=>{const{onKeyDown:t,role:n}=this.props;t&&t(e);const r=e.which||e.keyCode,{triggerOnEnter:s,triggerOnSpace:a}=sn(n);s&&r===on||a&&r===ln?(e.preventDefault(),this.setState({pressed:!0})):s||r!==on||(this.enterClick=!0)},this.handleKeyUp=e=>{const{onKeyUp:t,role:n}=this.props;t&&t(e);const r=e.which||e.keyCode,{triggerOnEnter:s,triggerOnSpace:a}=sn(n);s&&r===on||a&&r===ln?(this.setState({pressed:!1,focused:!0}),this.runCallbackAndMaybeNavigate(e)):s||r!==on||(this.enterClick=!1)},this.handleFocus=e=>{this.setState({focused:!0})},this.handleBlur=e=>{this.setState({focused:!1,pressed:!1})},this.state=cn,this.waitingForClick=!1,this.enterClick=!1,this.dragging=!1}navigateOrReset(e){if(e){const{history:e,href:t,skipClientNav:n,target:r}=this.props;t&&("_blank"===r?(window.open(t,"_blank"),this.setState({waiting:!1})):e&&!n?(e.push(t),this.setState({waiting:!1})):window.location.assign(t))}else this.setState({waiting:!1})}handleSafeWithNav(e,t){const{skipClientNav:n,history:r}=this.props;return r&&!n||"_blank"===this.props.target?(e(),this.navigateOrReset(t),Promise.resolve()):(this.state.waiting||this.setState({waiting:!0}),e().then((()=>{this.state.waiting||this.setState({waiting:!0})})).catch((e=>{})).finally((()=>{this.navigateOrReset(t)})))}runCallbackAndMaybeNavigate(e){const{onClick:t,beforeNav:n,safeWithNav:r,href:s,type:a}=this.props;let i=!0,o=!0;if(t&&t(e),e.defaultPrevented&&(i=!1,o=!1),e.preventDefault(),!s&&"submit"===a&&o){let t=e.currentTarget;for(;t;){if(t instanceof window.HTMLFormElement){const e=new window.Event("submit",{cancelable:!0});t.dispatchEvent(e);break}t=t.parentElement}}if(n)this.setState({waiting:!0}),n().then((()=>r?this.handleSafeWithNav(r,i):this.navigateOrReset(i))).catch((()=>{}));else{if(r)return this.handleSafeWithNav(r,i);this.navigateOrReset(i)}}render(){const e=this.props.disabled?A({},an,{onFocus:this.handleFocus,onBlur:this.handleBlur}):{onClick:this.handleClick,onMouseEnter:this.handleMouseEnter,onMouseLeave:this.handleMouseLeave,onMouseDown:this.handleMouseDown,onMouseUp:this.handleMouseUp,onDragStart:this.handleDragStart,onTouchStart:this.handleTouchStart,onTouchEnd:this.handleTouchEnd,onTouchCancel:this.handleTouchCancel,onKeyDown:this.handleKeyDown,onKeyUp:this.handleKeyUp,onFocus:this.handleFocus,onBlur:this.handleBlur,tabIndex:0};e.rel=this.props.rel||("_blank"===this.props.target?"noopener noreferrer":void 0);const{children:t}=this.props;return t&&t(this.state,e)}}pn.defaultProps={disabled:!1};const hn=e=>"string"==typeof e&&(!/^(https?:)?\/\//i.test(e)&&!/^([^#]*#[\w-]*|[\w\-.]+:)/.test(e)),un=function(e){var t="withRouter("+(e.displayName||e.name)+")",n=function(n){var r=n.wrappedComponentRef,s=M(n,["wrappedComponentRef"]);return d.default.createElement(je.Consumer,null,(function(n){return n||("production"!==process.env.NODE_ENV?q(!1,"You should not use <"+t+" /> outside a <Router>"):q(!1)),d.default.createElement(e,A({},s,n,{ref:r}))}))};return n.displayName=t,n.WrappedComponent=e,"production"!==process.env.NODE_ENV&&(n.propTypes={wrappedComponentRef:f.default.oneOfType([f.default.string,f.default.func,f.default.object])}),qe(n,e)}(pn);function dn(e,t,n){return n&&!0!==t&&e&&hn(e)?un:pn}const mn=["href","onClick","skipClientNav","beforeNav","safeWithNav","style","target","testId","onKeyDown","onKeyUp","hideDefaultFocusRing","light","disabled"],fn=At("a"),gn=At("button"),vn=At(vt);class yn extends u.Component{constructor(...e){super(...e),this.getCorrectTag=(e,t,n)=>{const r=this.props.href&&!this.props.disabled,s=t&&!this.props.skipClientNav&&hn(this.props.href||"");return r&&s&&this.props.href?u.createElement(vn,A({},n,{to:this.props.href,role:this.props.role,target:this.props.target||void 0,"aria-disabled":this.props.disabled?"true":void 0}),this.props.children(e)):r&&!s?u.createElement(fn,A({},n,{href:this.props.href,role:this.props.role,target:this.props.target||void 0,"aria-disabled":this.props.disabled?"true":void 0}),this.props.children(e)):u.createElement(gn,A({},n,{type:"button","aria-disabled":this.props.disabled}),this.props.children(e))}}renderClickableBehavior(e){const t=this.props,{href:n,onClick:r,skipClientNav:s,beforeNav:a,safeWithNav:i,style:o,target:l,testId:c,onKeyDown:p,onKeyUp:h,hideDefaultFocusRing:d,light:m,disabled:f}=t,g=M(t,mn),v=dn(n,s,e),y=e=>[bn.reset,bn.link,!d&&e.focused&&(m?bn.focusedLight:bn.focused),o];return a?u.createElement(v,{href:n,onClick:r,beforeNav:a,safeWithNav:i,onKeyDown:p,onKeyUp:h,disabled:f},((t,n)=>this.getCorrectTag(t,e,A({},g,{"data-test-id":c,style:y(t)},n)))):u.createElement(v,{href:n,onClick:r,safeWithNav:i,onKeyDown:p,onKeyUp:h,target:l,disabled:f},((t,n)=>this.getCorrectTag(t,e,A({},g,{"data-test-id":c,style:y(t)},n))))}render(){return u.createElement(je.Consumer,null,(e=>this.renderClickableBehavior(e)))}}yn.defaultProps={light:!1,disabled:!1,"aria-label":""};const bn=o.StyleSheet.create({reset:{border:"none",margin:0,padding:0,width:"auto",overflow:"visible",background:"transparent",textDecoration:"none",color:"inherit",font:"inherit",boxSizing:"border-box",touchAction:"manipulation",userSelect:"none",outline:"none",lineHeight:"normal",WebkitFontSmoothing:"inherit",MozOsxFontSmoothing:"inherit"},link:{cursor:"pointer"},focused:{outline:`solid 2px ${nn.blue}`},focusedLight:{outline:`solid 2px ${nn.white}`}}),{InlineIcon:En}=e.components;class wn extends u.Component{render(){const{icon:e,onClick:t,title:n}=this.props;return u.createElement(yn,{className:"section-control-button simple-button simple-button--small ",onClick:e=>{e.preventDefault(),t()},role:"button",hideDefaultFocusRing:!0,"aria-label":n,style:xn.button},(t=>u.createElement(En,e)))}}const xn=o.StyleSheet.create({button:{backgroundColor:nn.gold,margin:2,paddingRight:10,paddingLeft:10,paddingBottom:2}}),{InlineIcon:Cn,PropCheckBox:Sn}=e.components,{iconChevronDown:kn,iconChevronRight:Nn,iconTrash:Tn}=e.icons,_n=new RegExp("(\\[\\[☃ {id}\\]\\])".replace("{id}","[a-z-]+ [0-9]+"),"g"),On=/^\[\[([a-z-]+)$/,Mn=/(?:\n{2,}|^\n*)$/,An=/(\n*)$/,Pn=/^(\n*)/,Dn=e=>{let t=e.toString();return t.length>=5&&(t=t.replace(/(\d)(?=(\d{3})+$)/g,"$1{,}")),t};class In extends u.Component{constructor(){super(...arguments),x(this,"handleChange",(e=>{const t=e.currentTarget.value;""!==t&&this.props.onChange&&this.props.onChange(t)}))}shouldComponentUpdate(){return!1}render(){const t=e.Widgets.getPublicWidgets(),n=m.default.sortBy(m.default.keys(t),(e=>t[e].displayName));return u.createElement("select",{value:"",onChange:this.handleChange},u.createElement("option",{value:""},"Add a widget…"),u.createElement("option",{disabled:!0},"--"),m.default.map(n,(e=>u.createElement("option",{key:e,value:e},t[e].displayName))))}}const Rn=t=>{const n=m.default.omit(t,e.WIDGET_PROP_BLACKLIST);return e.Widgets.upgradeWidgetInfoToLatestVersion(n)};class zn extends u.Component{constructor(e){super(e),x(this,"_toggleWidget",(e=>{e.preventDefault(),this.setState({showWidget:!this.state.showWidget})})),x(this,"_handleWidgetChange",((e,t,n)=>{const r=Object.assign({},this.state.widgetInfo);r.options=Object.assign(this.refs.widget.serialize(),e),this.props.onChange(r,t,n)})),x(this,"_toggleStatic",(e=>{e.preventDefault();const t=Object.assign({},this.state.widgetInfo,{static:!this.state.widgetInfo.static});this.props.onChange(t)})),x(this,"_handleAlignmentChange",(e=>{const t=e.currentTarget.value,n=Object.assign({},this.state.widgetInfo);n.alignment=t,this.props.onChange(n)})),x(this,"getSaveWarnings",(()=>{const e=this.refs.widget.getSaveWarnings;return e?e():[]})),x(this,"serialize",(()=>{const e=this.state.widgetInfo;return{type:e.type,alignment:e.alignment,static:e.static,graded:e.graded,options:this.refs.widget.serialize(),version:e.version}})),this.state={showWidget:!1,widgetInfo:Rn(e)}}UNSAFE_componentWillReceiveProps(e){this.setState({widgetInfo:Rn(e)})}render(){const t=this.state.widgetInfo,n=e.Widgets.getEditor(t.type);let r;r=this.props.apiOptions.showAlignmentOptions?e.Widgets.getSupportedAlignments(t.type):["default"];const s=e.Widgets.supportsStaticMode(t.type),a="transformer"===t.type,i=u.createElement(Sn,{label:"Graded:",graded:t.graded,onChange:this.props.onChange});return u.createElement("div",{className:"perseus-widget-editor"},u.createElement("div",{className:"perseus-widget-editor-title "+(this.state.showWidget?"open":"closed")},u.createElement("a",{className:"perseus-widget-editor-title-id",href:"#",onClick:this._toggleWidget},this.props.id,this.state.showWidget?u.createElement(Cn,kn):u.createElement(Cn,Nn)),s&&u.createElement("input",{type:"button",onClick:this._toggleStatic,className:"simple-button--small",value:t.static?"Unset as static":"Set as static"}),r.length>1&&u.createElement("select",{className:"alignment",value:t.alignment,onChange:this._handleAlignmentChange},r.map((e=>u.createElement("option",{key:e},e)))),u.createElement(wn,{icon:Tn,onClick:()=>{this.props.onRemove()},title:"Remove image widget"})),u.createElement("div",{className:"perseus-widget-editor-content "+(this.state.showWidget?"enter":"leave")},a&&i,n&&u.createElement(n,C({ref:"widget",onChange:this._handleWidgetChange,static:t.static,apiOptions:this.props.apiOptions},t.options))))}}const Ln=/!\[[^\]]*\]\(([^\s)]+)[^)]*\)/g;class Fn extends u.Component{constructor(){super(...arguments),x(this,"lastUserValue",void 0),x(this,"deferredChange",void 0),x(this,"widgetIds",void 0),x(this,"state",{katex:void 0,showKatexErrors:!1,textAreaValue:this.props.content}),x(this,"getWidgetEditor",((t,n)=>{if(e.Widgets.getEditor(n))return u.createElement(zn,C({key:t,ref:t,id:t,type:n,onChange:this._handleWidgetEditorChange.bind(this,t),onRemove:this._handleWidgetEditorRemove.bind(this,t),apiOptions:this.props.apiOptions},this.props.widgets[t]))})),x(this,"_handleWidgetEditorChange",((e,t,n,r)=>{const s=Object.assign({},this.props.widgets);s[e]=Object.assign({},s[e],t),this.props.onChange({widgets:s},n,r)})),x(this,"_handleWidgetEditorRemove",(e=>{const t=this.refs.textarea,n=new RegExp("(\\[\\[☃ {id}\\]\\])".replace("{id}",e),"gm");this.props.onChange({content:t.value.replace(n,"")})})),x(this,"_sizeImages",(t=>{const n=(r=t.content,m.default.map(function(e,t){const n=[];for(;;){const r=e.exec(t);if(!r)break;n.push(r)}return n}(Ln,r),(e=>e[1])));var r;const s=m.default.pick(t.images,n),a=m.default.filter(n,(e=>!s[e]));m.default.each(a,(n=>{e.Util.getImageSize(n,((e,r)=>{s[n]={width:e,height:r},t.onChange({images:m.default.clone(s)},null,!0)}))}))})),x(this,"handleDrop",(e=>{const{imageUploader:t}=this.props;let n=this.state.textAreaValue||"";const r=e.dataTransfer;if(!r||!t)return;const s=r.files;if(0===s.length){const e=r.getData("URL");if(e){const t=n+"\n\n";this.lastUserValue=this.props.content,this.props.onChange({content:t})}return}const a=this.state.textAreaValue;m.default(s).chain().map((function(e){if(!e.type.match("image.*"))return null;const t="☃ "+m.default.uniqueId("image_");return n+="\n\n",{file:e,sentinel:t}})).reject(m.default.isNull).tap((()=>{this.lastUserValue=a,this.props.onChange({content:n})})).each((e=>{t(e.file,(t=>{this.lastUserValue=a,this.props.onChange({content:this.state.textAreaValue.replace(e.sentinel,t)})}))}))})),x(this,"handleChange",(e=>{clearTimeout(this.deferredChange),this.setState({textAreaValue:e.currentTarget.value}),this.deferredChange=setTimeout((()=>{this.state.textAreaValue!==this.props.content&&this.props.onChange({content:this.state.textAreaValue})}),this.props.apiOptions.editorChangeDelay)})),x(this,"_handleKeyDown",(t=>{if("Tab"===t.key){const n=y.findDOMNode(this.refs.textarea),r=e.Util.textarea.getWordBeforeCursor(n),s=r.string.toLowerCase().match(On);if(null!=s){const n=s[1],a=e.Widgets.getAllWidgetTypes(),i=m.default.filter(a,(e=>e.substring(0,n.length)===n));if(1===i.length){const e=i[0];this._addWidgetToContent(this.props.content,[r.pos.start,r.pos.end+1],e)}t.preventDefault()}}})),x(this,"_maybeCopyWidgets",(t=>{const n=t.currentTarget,r=n.value.substring(n.selectionStart,n.selectionEnd),s=m.default.map(r.match(_n),(t=>e.Util.rWidgetParts.exec(t)[1])),a=m.default.pick(this.serialize().widgets,s);localStorage.perseusLastCopiedText=r,localStorage.perseusLastCopiedWidgets=JSON.stringify(a),e.Log.log("Widgets copied: ".concat(localStorage.perseusLastCopiedWidgets))})),x(this,"_maybePasteWidgets",(t=>{const n=localStorage.perseusLastCopiedWidgets,r=localStorage.perseusLastCopiedText,s=t.originalEvent.clipboardData.getData("text");if(n&&r===s){t.preventDefault();const s=JSON.parse(n),a=this._safeWidgetNameMapping(s),i={};for(const[e,t]of Object.entries(s))i[a[e]]=t;const o=m.default.extend(i,this.props.widgets),l=r.replace(_n,(t=>{const n=e.Util.rWidgetParts.exec(t),r=n[0],s=n[1];return r.replace(s,a[s])})),c=t.currentTarget,p=c.selectionStart,h=this.state.textAreaValue.substr(0,p)+l+this.state.textAreaValue.substr(c.selectionEnd);this.lastUserValue=this.state.textAreaValue,this.props.onChange({content:h,widgets:o},(()=>{const t=p+l.length;e.Util.textarea.moveCursor(c,t)}))}})),x(this,"_safeWidgetNameMapping",(e=>{const t=m.default.keys(e).map((e=>e.split(" "))),n=m.default.uniq(t.map((e=>e[0]))),r=m.default.keys(this.props.widgets).map((e=>e.split(" "))),s={};m.default.each(n,(e=>{s[e]=m.default.chain(r).filter((t=>t[0]===e)).map((e=>+e[1]+1)).max().value(),s[e]=Math.max(s[e],1)}));const a={};return m.default.each(t,(e=>{const t=e.join(" "),n=e[0];a[t]="".concat(n," ").concat(s[n]),s[n]++})),a})),x(this,"_addWidgetToContent",((t,n,r)=>{var s;const a=y.findDOMNode(this.refs.textarea),i=m.default.map(t.match(_n),(t=>{const n=e.Util.rWidgetParts.exec(t);return[n[2],+n[3]]})),o=m.default.reduce(i,((e,t)=>{const[n,s]=t;return n===r?Math.max(s+1,e):e}),1),l=r+" "+o,c="[[☃ {id}]]".replace("{id}",l),p="block"===e.Widgets.getDefaultAlignment(r),h=t.slice(0,n[0]),u=t.slice(n[1]),d=(p?(e=>{if(!Mn.test(e)){const t=An.exec(e);if(t){const n=t[1];return e+"\n\n".slice(0,2-n.length)}}return e})(h):h)+c+(p?(e=>{const t=Pn.exec(e);if(!t)return e;const n=t[1];return"\n\n".slice(0,2-n.length)+e})(u):u),f=m.default.clone(this.props.widgets);f[l]={options:null===(s=e.Widgets.getEditor(r))||void 0===s?void 0:s.defaultProps,type:r,version:e.Widgets.getVersion(r)},this.lastUserValue=this.props.content,this.props.onChange({content:d,widgets:f},(function(){e.Util.textarea.moveCursor(a,d.length-u.length)}))})),x(this,"_addWidget",(e=>{const t=this.refs.textarea;this._addWidgetToContent(this.props.content,[t.selectionStart,t.selectionEnd],e),t.focus()})),x(this,"addTemplate",(t=>{const n=t.currentTarget.value;if(""===n)return;t.currentTarget.value="";let r,s=this.props.content;if(s=s.replace(/\n*$/,"\n\n"),"table"===n)r="header 1 | header 2 | header 3\n- | - | -\ndata 1 | data 2 | data 3\ndata 4 | data 5 | data 6\ndata 7 | data 8 | data 9";else if("titledTable"===n)r="|| **Table title** ||\nheader 1 | header 2 | header 3\n- | - | -\ndata 1 | data 2 | data 3\ndata 4 | data 5 | data 6\ndata 7 | data 8 | data 9";else if("alignment"===n)r="$\\begin{align} x+5 &= 30 \\\\\nx+5-5 &= 30-5 \\\\\nx &= 25 \\end{align}$";else if("piecewise"===n)r="$f(x) = \\begin{cases}\n7 & \\text{if }x=1 \\\\\nf(x-1)+5 & \\text{if }x > 1\n\\end{cases}$";else{if("allWidgets"!==n)throw new e.PerseusError("Invalid template type: "+n,e.Errors.InvalidInput,{metadata:{templateType:n}});r=e.Widgets.getAllWidgetTypes().map((t=>"[[".concat(e.Util.snowman," ").concat(t," 1]]"))).join("\n\n")}const a=s+r;this.lastUserValue=this.props.content,this.props.onChange({content:a},this.focusAndMoveToEnd)})),x(this,"getSaveWarnings",(()=>{const e=m.default.intersection(this.widgetIds,m.default.keys(this.refs));return m.default(e).chain().map((e=>{const t=this.refs[e].getSaveWarnings,n=t?t():[];return m.default.map(n,(t=>e+": "+t))})).flatten(!0).value()})),x(this,"focus",(()=>{const e=y.findDOMNode(this.refs.textarea);e&&e.focus()})),x(this,"focusAndMoveToEnd",(()=>{this.focus();const e=y.findDOMNode(this.refs.textarea);e&&(e.selectionStart=e.value.length,e.selectionEnd=e.value.length)})),x(this,"serialize",(e=>{const t={},n=m.default.intersection(this.widgetIds,m.default.keys(this.refs));return m.default.each(n,(e=>{t[e]=this.refs[e].serialize()})),e&&e.keepDeletedWidgets&&m.default.chain(this.props.widgets).keys().reject((e=>m.default.contains(n,e))).each((e=>{t[e]=this.props.widgets[e]})),{replace:this.props.replace,content:this.props.content,images:this.props.images,widgets:t}}))}componentDidMount(){this.lastUserValue=null,this._sizeImages(this.props),v.default(y.findDOMNode(this.refs.textarea)).on("copy cut",this._maybeCopyWidgets).on("paste",this._maybePasteWidgets),e.Dependencies.getDependencies().getKaTeX().then((e=>{this.setState({katex:e})}))}UNSAFE_componentWillReceiveProps(e){this.props.content!==e.content&&this.setState({textAreaValue:e.content})}componentDidUpdate(e){const t=y.findDOMNode(this.refs.textarea);null!==this.lastUserValue&&t&&(t.focus(),t.value=this.lastUserValue,t.selectionStart=0,t.select(0,e.content.length),!1===document.execCommand("insertText",!1,this.props.content)&&(t.value=this.props.content),this.lastUserValue=null),this.props.content!==e.content&&this._sizeImages(this.props)}componentWillUnmount(){clearTimeout(this.deferredChange)}render(){let t,n,r,s,a,i,o;const l=[];if(this.props.showWordCount){const t=e.PerseusMarkdown.characterCount(this.props.content),n=Math.floor(t/6);o=u.createElement("span",{className:"perseus-editor-word-count",title:"~"+Dn(n)+" words ("+Dn(t)+" characters)"},Dn(n))}const{katex:c}=this.state;if(this.props.widgetEnabled&&c){t=e.Util.split(this.props.content,_n),n={},r=[];for(let s=0;s<t.length;s++)if(s%2==0){r.push(t[s]);const n=e.PerseusMarkdown.parse(t[s]);e.PerseusMarkdown.traverseContent(n,(t=>{if("math"===t.type||"blockMath"===t.type){const n=e.preprocessTex(t.content);try{c.renderToString(n,{colorIsTextColor:!0})}catch(e){l.push({math:n,message:e.message})}}}))}else{const a=e.Util.rWidgetParts.exec(t[s]);if(null!=a){const e=a[1],i=a[2],o=e in n;n[e]=this.getWidgetEditor(e,i);const l=o||!n[e]?"error ":"",c=o?s:e;r.push(u.createElement("b",{className:l,key:c},t[s]))}}this.widgetIds=m.default.keys(n),s=u.createElement(In,{ref:"widgetSelect",onChange:this._addWidget});const p="Insert template…";if(a=u.createElement("select",{onChange:this.addTemplate},u.createElement("option",{value:""},p),u.createElement("option",{disabled:!0},"--"),u.createElement("option",{value:"table"},"Table"),u.createElement("option",{value:"titledTable"},"Titled table"),u.createElement("option",{value:"alignment"},"Aligned equations"),u.createElement("option",{value:"piecewise"},"Piecewise function"),u.createElement("option",{disabled:!0},"--"),u.createElement("option",{value:"allWidgets"},"All widgets (for testing)")),!this.props.immutableWidgets){const e=Object.values(n);i=u.createElement("div",{className:"perseus-editor-widgets"},u.createElement("div",{className:"perseus-editor-widgets-selectors"},s,a,o),e),o=null}}else r=[this.props.content];r.push(u.createElement("br",{key:"end"}));const p=[u.createElement("div",{className:"perseus-textarea-underlay",ref:"underlay",key:"underlay"},r),u.createElement("textarea",{ref:"textarea",key:"textarea",onChange:this.handleChange,onKeyDown:this._handleKeyDown,placeholder:this.props.placeholder,disabled:this.props.disabled,value:this.state.textAreaValue})];let h;h=this.props.imageUploader?u.createElement(T,{onDrop:this.handleDrop,className:"perseus-textarea-pair"},p):u.createElement("div",{className:"perseus-textarea-pair"},p);const d=0===this.props.content.replace(/\[\[\u2603 (([a-z-]+) ([0-9]+))\]\]/g,"").trim().length,f=!/\[\[\u2603 (([a-z-]+) ([0-9]+))\]\]/g.test(this.props.content),g={borderTop:"none",padding:4,backgroundColor:"pink"};return u.createElement("div",{className:"perseus-single-editor "+(this.props.className||"")},h,l.length>0&&u.createElement(_,{errorList:l}),this.props.warnNoPrompt&&d&&u.createElement("div",{style:g},"Graded Groups should contain a prompt"),this.props.warnNoWidgets&&f&&u.createElement("div",{style:g},"Graded Groups should contain at least one widget"),o,i)}}x(Fn,"defaultProps",{content:"",placeholder:"",widgets:{},images:{},disabled:!1,widgetEnabled:!0,immutableWidgets:!1,showWordCount:!1,warnNoPrompt:!1,warnNoWidgets:!1});let Un=0;const qn={},Wn={};window.iframeDataStore={},window.addEventListener("message",(t=>{if("string"==typeof t.data){const e=qn[t.data];e&&e()}else t.data.id&&(void 0!==t.data.height?Wn[t.data.id](t.data.height):t.data.lintWarnings&&e.Log.log("LINTER REPORT",{lintWarnings:JSON.stringify(t.data.lintWarnings)}))}));class Vn extends u.Component{constructor(){super(...arguments),x(this,"_frame",void 0),x(this,"_isMounted",void 0),x(this,"_lastData",void 0),x(this,"_lastHeight",void 0),x(this,"iframeID",void 0)}componentDidMount(){this._isMounted=!0,this.iframeID=Un,Un++,this._prepareFrame(),qn[this.iframeID]=()=>{this.sendNewData(this._lastData)},Wn[this.iframeID]=e=>{this._lastHeight=e,this._isMounted&&this.props.seamless&&(this.refs.container.style.height=e+"px")}}shouldComponentUpdate(e){return e.datasetValue!==this.props.datasetValue||e.seamless!==this.props.seamless}componentDidUpdate(e){this.props.seamless?this.refs.container.style.height=this._lastHeight+"px":this.refs.container.style.height="100%",e.datasetValue!==this.props.datasetValue&&this._prepareFrame()}componentWillUnmount(){qn[this.iframeID]=null,Wn[this.iframeID]=null,this._isMounted=!1}_prepareFrame(){this._frame&&this.refs.container.removeChild(this._frame);const e=document.createElement("iframe");e.style.width="100%",e.style.height="100%",e.src=this.props.url,this.props.datasetKey&&(e.dataset[this.props.datasetKey]=this.props.datasetValue),e.dataset.id=String(this.iframeID),this.props.seamless&&(e.dataset.lintGutter="true"),this.refs.container.appendChild(e),this._frame=e}sendNewData(e){const t=this._frame;this._isMounted&&e&&null!=t&&t.contentWindow&&(this._lastData=e,window.iframeDataStore[this.iframeID]=e,t.contentWindow.postMessage(this.iframeID,"*"))}render(){return u.createElement("div",{ref:"container",style:{width:"100%",height:"100%"}})}}const{HUD:jn,InlineIcon:Bn}=e.components,{iconCircleArrowDown:$n,iconCircleArrowUp:Hn,iconPlus:Gn,iconTrash:Yn}=e.icons;class Kn extends u.Component{constructor(){super(...arguments),x(this,"state",{highlightLint:!0}),x(this,"_handleJsonChange",(e=>{this.props.onChange({json:e})})),x(this,"_handleEditorChange",((e,t)=>{const n=m.default.clone(this._sections());n[e]=m.default.extend({},n[e],t),this.props.onChange({json:n})}))}componentDidMount(){this._updatePreviewFrames()}componentDidUpdate(){this._updatePreviewFrames()}_updatePreviewFrames(){"preview"===this.props.mode?this.refs["frame-all"].sendNewData({type:"article-all",data:this._sections().map(((e,t)=>this._apiOptionsForSection(e,t)))}):"edit"===this.props.mode&&this._sections().forEach(((e,t)=>{this.refs["frame-"+t].sendNewData({type:"article",data:this._apiOptionsForSection(e,t)})}))}_apiOptionsForSection(t,n){const r=this.refs["editor".concat(n)];return{apiOptions:{...e.ApiOptions.defaults,...this.props.apiOptions,showAlignmentOptions:!0,isArticle:!0},json:t,useNewStyles:this.props.useNewStyles,linterContext:{contentType:"article",highlightLint:this.state.highlightLint,paths:this.props.contentPaths},legacyPerseusLint:r?r.getSaveWarnings():[]}}_sections(){return Array.isArray(this.props.json)?this.props.json:[this.props.json]}_renderEditor(){const{imageUploader:t,sectionImageUploadGenerator:n}=this.props,r={...e.ApiOptions.defaults,...this.props.apiOptions,showAlignmentOptions:!0,isArticle:!0},{KatexProvider:s}=e.Dependencies.getDependencies(),a=this._sections();return u.createElement("div",{className:"perseus-editor-table"},a.map(((e,i)=>[u.createElement("div",{className:"perseus-editor-row",key:i},u.createElement("div",{className:"perseus-editor-left-cell"},u.createElement("div",{className:"pod-title"},"Section ",i+1,u.createElement("div",{style:{display:"inline-block",float:"right"}},n(i),u.createElement(wn,{icon:Gn,onClick:()=>{this._handleAddSectionAfter(i)},title:"Add a new section after this one"}),i+1<a.length&&u.createElement(wn,{icon:$n,onClick:()=>{this._handleMoveSectionLater(i)},title:"Move this section down"}),i>0&&u.createElement(wn,{icon:Hn,onClick:()=>{this._handleMoveSectionEarlier(i)},title:"Move this section up"}),u.createElement(wn,{icon:Yn,onClick:()=>{confirm("Are you sure you want to delete section "+(i+1)+"?")&&this._handleRemoveSection(i)},title:"Delete this section"}))),u.createElement(s,null,u.createElement(Fn,C({},e,{apiOptions:r,imageUploader:t,onChange:m.default.partial(this._handleEditorChange,i),placeholder:"Type your section text here...",ref:"editor"+i})))),u.createElement("div",{className:"editor-preview"},this._renderIframePreview(i,!0)))])),this._renderAddSection(),this._renderLinterHUD())}_renderAddSection(){return u.createElement("div",{className:"perseus-editor-row"},u.createElement("div",{className:"perseus-editor-left-cell"},u.createElement("a",{href:"#",className:"simple-button orange",onClick:()=>{this._handleAddSectionAfter(this._sections().length-1)}},u.createElement(Bn,Gn)," Add a section")))}_renderLinterHUD(){return u.createElement(jn,{message:"Style warnings",enabled:this.state.highlightLint,onClick:()=>{this.setState({highlightLint:!this.state.highlightLint})}})}_renderIframePreview(e,t){const n="phone"===this.props.screen||"tablet"===this.props.screen;return u.createElement(k,{deviceType:this.props.screen,nochrome:t},u.createElement(Vn,{ref:"frame-"+e,key:this.props.screen,datasetKey:"mobile",datasetValue:n,seamless:t,url:this.props.previewURL}))}_renderPreviewMode(){return u.createElement("div",{className:"standalone-preview"},this._renderIframePreview("all",!1))}_handleMoveSectionEarlier(e){if(0===e)return;const t=m.default.clone(this._sections()),n=t[e];t.splice(e,1),t.splice(e-1,0,n),this.props.onChange({json:t})}_handleMoveSectionLater(e){const t=m.default.clone(this._sections());if(e+1===t.length)return;const n=t[e];t.splice(e,1),t.splice(e+1,0,n),this.props.onChange({json:t})}_handleAddSectionAfter(e){const t=m.default.clone(this.serialize()),n=e>=0?{widgets:t[e].widgets}:{};t.splice(e+1,0,n),this.props.onChange({json:t})}_handleRemoveSection(e){const t=m.default.clone(this._sections());t.splice(e,1),this.props.onChange({json:t})}serialize(){if("edit"===this.props.mode)return this._sections().map(((e,t)=>this.refs["editor"+t].serialize()));if("preview"===this.props.mode||"json"===this.props.mode)return this.props.json;throw new e.PerseusError("Could not serialize; mode "+this.props.mode+" not found",e.Errors.Internal)}getSaveWarnings(){if("edit"!==this.props.mode)throw new e.PerseusError("Can only get save warnings in edit mode.",e.Errors.NotAllowed);return this._sections().map(((e,t)=>this.refs["editor"+t].getSaveWarnings()))}render(){return u.createElement("div",{className:"framework-perseus perseus-article-editor"},"edit"===this.props.mode&&this._renderEditor(),"preview"===this.props.mode&&this._renderPreviewMode(),"json"===this.props.mode&&u.createElement("div",{className:"json-editor"},u.createElement("div",{className:"json-editor-warning"},u.createElement("span",null,"Warning: Editing in this mode can lead to broken articles!")),u.createElement(N,{multiLine:!0,onChange:this._handleJsonChange,value:this.props.json})))}}x(Kn,"defaultProps",{contentPaths:[],json:[{}],mode:"edit",screen:"desktop",sectionImageUploadGenerator:()=>u.createElement("span",null),useNewStyles:!1});const{ButtonGroup:Jn,InlineIcon:Xn}=e.components,{devices:Zn}=e.constants,{iconDesktop:Qn,iconMobilePhone:er,iconTablet:tr}=e.icons;class nr extends u.Component{constructor(){super(...arguments),x(this,"handleChange",(e=>{this.props.onViewportSizeChanged(e)}))}render(){const e=u.createElement("span",null,u.createElement(Xn,er)," Phone"),t=u.createElement("span",null,u.createElement(Xn,tr)," Tablet"),n=u.createElement("span",null,u.createElement(Xn,Qn)," Desktop");return u.createElement("span",{className:"viewport-resizer"},"Viewport:"," ",u.createElement(Jn,{value:this.props.deviceType,allowEmpty:!1,buttons:[{value:Zn.PHONE,content:e},{value:Zn.TABLET,content:t},{value:Zn.DESKTOP,content:n}],onChange:this.handleChange}))}}x(nr,"propTypes",{deviceType:f.default.string.isRequired,onViewportSizeChanged:f.default.func.isRequired});var rr={exports:{}};!function(e){var t=function(){function e(e){return{newPos:e.newPos,components:e.components.slice(0)}}function t(e){for(var t=[],n=0;n<e.length;n++)e[n]&&t.push(e[n]);return t}function n(e){var t=e;return t=(t=(t=(t=t.replace(/&/g,"&")).replace(/</g,"<")).replace(/>/g,">")).replace(/"/g,""")}var r=function(e){this.ignoreWhitespace=e};r.prototype={diff:function(t,n){if(n===t)return[{value:n}];if(!n)return[{value:t,removed:!0}];if(!t)return[{value:n,added:!0}];n=this.tokenize(n),t=this.tokenize(t);var r=n.length,s=t.length,a=r+s,i=[{newPos:-1,components:[]}],o=this.extractCommon(i[0],n,t,0);if(i[0].newPos+1>=r&&o+1>=s)return i[0].components;for(var l=1;l<=a;l++)for(var c=-1*l;c<=l;c+=2){var p,h=i[c-1],u=i[c+1];o=(u?u.newPos:0)-c,h&&(i[c-1]=void 0);var d=h&&h.newPos+1<r,m=u&&0<=o&&o<s;if(d||m){!d||m&&h.newPos<u.newPos?(p=e(u),this.pushComponent(p.components,t[o],void 0,!0)):((p=e(h)).newPos++,this.pushComponent(p.components,n[p.newPos],!0,void 0));o=this.extractCommon(p,n,t,c);if(p.newPos+1>=r&&o+1>=s)return p.components;i[c]=p}else i[c]=void 0}},pushComponent:function(e,t,n,r){var s=e[e.length-1];s&&s.added===n&&s.removed===r?e[e.length-1]={value:this.join(s.value,t),added:n,removed:r}:e.push({value:t,added:n,removed:r})},extractCommon:function(e,t,n,r){for(var s=t.length,a=n.length,i=e.newPos,o=i-r;i+1<s&&o+1<a&&this.equals(t[i+1],n[o+1]);)i++,o++,this.pushComponent(e.components,t[i],void 0,void 0);return e.newPos=i,o},equals:function(e,t){var n=/\S/;return!(!this.ignoreWhitespace||n.test(e)||n.test(t))||e===t},join:function(e,t){return e+t},tokenize:function(e){return e}};var s=new r,a=new r(!0),i=new r;a.tokenize=i.tokenize=function(e){return t(e.split(/(\s+|\b)/))};var o=new r(!0);o.tokenize=function(e){return t(e.split(/([{}:;,]|\s+)/))};var l=new r;return l.tokenize=function(e){for(var t=[],n=e.split(/^/m),r=0;r<n.length;r++){var s=n[r],a=n[r-1];"\n"==s&&a&&"\r"===a[a.length-1]?t[t.length-1]+="\n":s&&t.push(s)}return t},{Diff:r,diffChars:function(e,t){return s.diff(e,t)},diffWords:function(e,t){return a.diff(e,t)},diffWordsWithSpace:function(e,t){return i.diff(e,t)},diffLines:function(e,t){return l.diff(e,t)},diffCss:function(e,t){return o.diff(e,t)},createPatch:function(e,t,n,r,s){var a=[];a.push("Index: "+e),a.push("==================================================================="),a.push("--- "+e+(void 0===r?"":"\t"+r)),a.push("+++ "+e+(void 0===s?"":"\t"+s));var i=l.diff(t,n);function o(e){return e.map((function(e){return" "+e}))}function c(e,t,n){var r=i[i.length-2],s=t===i.length-2,a=t===i.length-3&&(n.added!==r.added||n.removed!==r.removed);/\n$/.test(n.value)||!s&&!a||e.push("\")}i[i.length-1].value||i.pop(),i.push({value:"",lines:[]});for(var p=0,h=0,u=[],d=1,m=1,f=0;f<i.length;f++){var g=i[f],v=g.lines||g.value.replace(/\n$/,"").split("\n");if(g.lines=v,g.added||g.removed){if(!p){var y=i[f-1];p=d,h=m,y&&(p-=(u=o(y.lines.slice(-4))).length,h-=u.length)}u.push.apply(u,v.map((function(e){return(g.added?"+":"-")+e}))),c(u,f,g),g.added?m+=v.length:d+=v.length}else{if(p)if(v.length<=8&&f<i.length-2)u.push.apply(u,o(v));else{var b=Math.min(v.length,4);a.push("@@ -"+p+","+(d-p+b)+" +"+h+","+(m-h+b)+" @@"),a.push.apply(a,u),a.push.apply(a,o(v.slice(0,b))),v.length<=4&&c(a,f,g),p=0,h=0,u=[]}d+=v.length,m+=v.length}}return a.join("\n")+"\n"},applyPatch:function(e,t){for(var n=t.split("\n"),r=[],s=!1,a=!1,i="I"===n[0][0]?4:0;i<n.length;i++)if("@"===n[i][0]){var o=n[i].split(/@@ -(\d+),(\d+) \+(\d+),(\d+) @@/);r.unshift({start:o[3],oldlength:o[2],oldlines:[],newlength:o[4],newlines:[]})}else"+"===n[i][0]?r[0].newlines.push(n[i].substr(1)):"-"===n[i][0]?r[0].oldlines.push(n[i].substr(1)):" "===n[i][0]?(r[0].newlines.push(n[i].substr(1)),r[0].oldlines.push(n[i].substr(1))):"\\"===n[i][0]&&("+"===n[i-1][0]?s=!0:"-"===n[i-1][0]&&(a=!0));var l=e.split("\n");for(i=r.length-1;i>=0;i--){for(var c=r[i],p=0;p<c.oldlength;p++)if(l[c.start-1+p]!==c.oldlines[p])return!1;Array.prototype.splice.apply(l,[c.start-1,+c.oldlength].concat(c.newlines))}if(s)for(;!l[l.length-1];)l.pop();else a&&l.push("");return l.join("\n")},convertChangesToXML:function(e){for(var t=[],r=0;r<e.length;r++){var s=e[r];s.added?t.push("<ins>"):s.removed&&t.push("<del>"),t.push(n(s.value)),s.added?t.push("</ins>"):s.removed&&t.push("</del>")}return t.join("")},convertChangesToDMP:function(e){for(var t,n=[],r=0;r<e.length;r++)t=e[r],n.push([t.added?1:t.removed?-1:0,t.value]);return n}}}();e.exports=t}(rr);var sr=rr.exports;const ar=function(e){return e.added?"added":e.removed?"removed":"unchanged"},ir=e=>m.default.map(e.value,(t=>({value:t,status:ar(e)}))),or=new sr.Diff;or.tokenize=e=>m.default.map(e,(e=>[e])),or.join=(e,t)=>e.concat(t),or.equals=m.default.isEqual;const lr=e=>{return t=e,n=ir,m.default.flatten(m.default.map(t,n),!0);var t,n},{SvgImage:cr}=e.components,pr=/http.*?\.png|web\+graphie[^)]*/g,hr=function(e){return e.match(pr)||[]},ur=function(e,t,n){return e.added?t:e.removed?n:""};class dr extends u.Component{render(){return u.createElement("div",null,m.default.map(this.props.images,((e,t)=>{const n=E.default({image:!0,"image-unchanged":"unchanged"===e.status,"image-added":"added"===e.status,"image-removed":"removed"===e.status});return u.createElement("div",{key:t},u.createElement("div",{className:n},u.createElement(cr,{src:e.value,title:e.value})))})))}}x(dr,"propTypes",{images:f.default.arrayOf(f.default.shape({})).isRequired});class mr extends u.Component{constructor(){super(...arguments),x(this,"state",{collapsed:this.props.before===this.props.after}),x(this,"handleExpand",(()=>{this.setState({collapsed:!1})}))}UNSAFE_componentWillReceiveProps(e){this.setState({collapsed:e.before===e.after})}render(){const e=function(e){const t=[];let n=[];return m.default.each(e,(e=>{const r=e.value.split("\n");m.default.each(r,((r,s)=>{s>0&&(t.push(n),n=[]);const a=m.default.extend({},e,{value:r});n.push(a)}))})),n.length&&t.push(n),t}(sr.diffWords(this.props.before,this.props.after)),t=function(e,t){const n=or.diff(e,t),r=lr(n);return{before:m.default.filter(r,(e=>"added"!==e.status)),after:m.default.filter(r,(e=>"removed"!==e.status))}}(hr(this.props.before),hr(this.props.after)),n=m.default.map(e,(e=>{const t={};return t.before=m.default(e).map((function(e,t){return u.createElement("span",{key:t,className:ur(e,"not-present","removed dark")},e.value)})),t.after=m.default(e).map((function(e,t){return u.createElement("span",{key:t,className:ur(e,"added dark","not-present")},e.value)})),t})),r=E.default({"diff-row":!0,collapsed:this.state.collapsed});return u.createElement("div",null,u.createElement("div",{className:"diff-header"},this.props.title),u.createElement("div",{className:"diff-header"},this.props.title),u.createElement("div",{className:"diff-body ui-helper-clearfix"},m.default.map(["before","after"],((e,r)=>u.createElement("div",{className:"diff-row "+e,key:r},!this.state.collapsed&&m.default.map(n,((t,n)=>{const r=t[e].length>1,s=E.default({"diff-line":!0,added:"after"===e&&r,removed:"before"===e&&r});return u.createElement("div",{className:s,key:n},t[e])})),!this.state.collapsed&&u.createElement(dr,{images:t[e]}))))),m.default.map(["before","after"],((e,t)=>u.createElement("div",{className:r+" "+e,key:t,onClick:this.handleExpand},this.state.collapsed&&u.createElement("span",null,u.createElement("span",{className:"expand-button"}," ","[ show unmodified ]"," "))))))}}x(mr,"propTypes",{after:f.default.string,before:f.default.string,title:f.default.string.isRequired}),x(mr,"defaultProps",{after:"",before:""});const fr=function(e,t,n){return"object"==typeof e||"object"==typeof t?function(e,t,n){const r=m.default.isObject(e)?m.default(e).keys():[],s=m.default.isObject(t)?m.default(t).keys():[],a=m.default.union(r,s),i=m.default.map(a,(function(n){return fr((e||{})[n],(t||{})[n],n)}));let o;o=void 0===e?"added":void 0===t?"removed":m.default.any(i,(function(e){return"unchanged"!==e.status}))?"changed":"unchanged";return{after:"",before:"",children:i,key:n,status:o}}(e,t,n):function(e,t,n){let r;return r=e===t?"unchanged":void 0===e?"added":void 0===t?"removed":"changed",{after:JSON.stringify(t),before:JSON.stringify(e),children:[],key:n,status:r}}(e,t,n)},{SvgImage:gr}=e.components,vr=function(e){return 20*(e-1)};class yr extends u.Component{render(){const e=E.default(this.props.className,{"diff-row":!0,before:"before"===this.props.side,after:"after"===this.props.side});return u.createElement("div",{className:e},u.createElement("div",{style:{paddingLeft:vr(this.props.depth)}},this.props.showKey&&this.props.propKey+": ",u.createElement("span",{className:"inner-value dark "+this.props.className},this.props.value)))}}x(yr,"propTypes",{className:f.default.string.isRequired,depth:f.default.number.isRequired,propKey:f.default.string.isRequired,showKey:f.default.bool.isRequired,side:f.default.oneOf(["before","after"]).isRequired,value:f.default.string});class br extends u.Component{render(){const e=this;return u.createElement("div",{onClick:e.props.onClick,style:{clear:"both"}},m.default.map(["before","after"],(function(t){return u.createElement("div",{className:"diff-row collapsed "+t,key:t},u.createElement("div",{style:{paddingLeft:vr(e.props.depth)}},u.createElement("span",null," [ show unmodified ] ")))})))}}x(br,"propTypes",{depth:f.default.number,onClick:f.default.func.isRequired}),x(br,"defaultProps",{depth:0});class Er extends u.Component{constructor(){super(...arguments),x(this,"state",{expanded:this.props.expanded}),x(this,"expand",(()=>{this.setState({expanded:!0})}))}render(){const e=this.props.entry,t="removed"===e.status,n="added"===e.status,r="changed"===e.status,s=e.children.length>0,a=E.default({removed:t||r&&!s,dark:t,"blank-space":n}),i=E.default({added:n||r&&!s,dark:n,"blank-space":t});let o;o=this.state.expanded?e.children:m.default(e.children).select((function(e){return"unchanged"!==e.status}));let l=o.length<e.children.length;e.children.length===o.length+1&&(o=e.children,l=!1);const c=this;return u.createElement("div",null,e.key&&u.createElement("div",{style:{clear:"both"}},u.createElement(yr,{side:"before",className:a,depth:this.props.depth,propKey:e.key,showKey:!n,value:e.before}),u.createElement(yr,{side:"after",className:i,depth:this.props.depth,propKey:e.key,showKey:!t,value:e.after})),m.default.map(o,(function(e){return u.createElement(Er,{key:e.key,depth:c.props.depth+1,entry:e,expanded:c.state.expanded})})),l&&u.createElement(br,{depth:this.props.depth+1,onClick:this.expand}))}}x(Er,"propTypes",{depth:f.default.number,entry:f.default.shape({after:f.default.string,before:f.default.string,children:f.default.arrayOf(f.default.any),key:f.default.string}),expanded:f.default.bool}),x(Er,"defaultProps",{depth:0});class wr extends u.Component{render(){const{before:e,after:t}=this.props,n=e.options&&e.options.backgroundImage?e.options.backgroundImage.url:"",r=t.options&&t.options.backgroundImage?t.options.backgroundImage.url:"";return u.createElement("div",null,u.createElement("div",{className:"diff-row before"},n&&u.createElement("div",{className:E.default({image:!0,"image-unchanged":n===r,"image-removed":n!==r})},u.createElement(gr,{src:n,title:n}))),u.createElement("div",{className:"diff-row after"},r&&u.createElement("div",{className:E.default({image:!0,"image-unchanged":n===r,"image-added":n!==r})},u.createElement(gr,{src:r,title:r}))))}}x(wr,"propTypes",{after:f.default.shape({options:f.default.objectOf(f.default.any)}).isRequired,before:f.default.shape({options:f.default.objectOf(f.default.any)}).isRequired});class xr extends u.Component{render(){const{after:e,before:t,title:n,type:r}=this.props,s=fr(t,e);return u.createElement("div",null,u.createElement("div",{className:"diff-header"},n),u.createElement("div",{className:"diff-header"},n),u.createElement("div",{className:"diff-body ui-helper-clearfix"},"image"===r&&u.createElement(wr,{before:t,after:e}),u.createElement(Er,{entry:s})))}}x(xr,"propTypes",{after:f.default.shape({options:f.default.objectOf(f.default.any)}),before:f.default.shape({options:f.default.objectOf(f.default.any)}),title:f.default.string.isRequired,type:f.default.string}),x(xr,"defaultProps",{after:{},before:{},type:""});const Cr=function(t,n){const{alignment:r,graded:s,options:a,type:i}=t||{},o={options:a};var l;(n&&e.Widgets.getSupportedAlignments(i).length>1&&(o.alignment=r),"transformer"===i&&(o.graded=s),e.Widgets.supportsStaticMode(i))&&(o.static=null!==(l=null==t?void 0:t.static)&&void 0!==l?l:void 0);return o};class Sr extends u.Component{render(){var e,t;const{after:n,before:r,showAlignmentOptions:s,showSeparator:a,title:i}=this.props;let o,l;(r.content||n.content)&&(o=u.createElement(mr,{before:r.content,after:n.content,title:i}));const c=Object.keys(null!==(e=r.widgets)&&void 0!==e?e:{}).filter((e=>r.content.includes(e))),p=Object.keys(null!==(t=n.widgets)&&void 0!==t?t:{}).filter((e=>n.content.includes(e)));if(c.length||p.length){l=m.default.union(c,p).map((e=>{var t,a,i,o,l,c;return u.createElement(xr,{before:Cr(null===(t=r.widgets)||void 0===t?void 0:t[e],s),after:Cr(null===(a=n.widgets)||void 0===a?void 0:a[e],s),title:e,type:(null!==(i=null===(o=r.widgets)||void 0===o?void 0:o[e])&&void 0!==i?i:{}).type||(null!==(l=null===(c=n.widgets)||void 0===c?void 0:c[e])&&void 0!==l?l:{}).type,key:e})}))}return u.createElement("div",null,o,l,a&&u.createElement("div",{className:"diff-separator"}))}}x(Sr,"defaultProps",{after:{content:"",images:{},widgets:{}},before:{content:"",images:{},widgets:{}},showAlignmentOptions:!1,showSeparator:!1});const kr=f.default.shape({content:f.default.string,images:f.default.objectOf(f.default.any),widgets:f.default.objectOf(f.default.any)});class Nr extends u.Component{constructor(){super(...arguments),x(this,"state",Nr._stateFromProps(this.props))}UNSAFE_componentWillReceiveProps(e){this.setState(Nr._stateFromProps(e))}render(){const{before:e,after:t}=this.state,n=Math.max(e.length,t.length),r=m.default.times(n,(r=>u.createElement(Sr,{before:r<e.length?e[r]:void 0,after:r<t.length?t[r]:void 0,title:"Section ".concat(r+1),showAlignmentOptions:!0,showSeparator:r<n-1,key:r})));return u.createElement("div",{className:"framework-perseus"},r)}}x(Nr,"propTypes",{after:f.default.oneOfType([kr,f.default.arrayOf(kr)]).isRequired,before:f.default.oneOfType([kr,f.default.arrayOf(kr)]).isRequired}),x(Nr,"_stateFromProps",(e=>{const{before:t,after:n}=e;return{before:Array.isArray(t)?t:[t],after:Array.isArray(n)?n:[n]}}));const Tr=f.default.shape({question:f.default.shape({}).isRequired,answerArea:f.default.shape({}).isRequired,hints:f.default.arrayOf(f.default.any).isRequired});class _r extends u.Component{render(){const{before:e,after:t}=this.props,n=Math.max(e.hints.length,t.hints.length),r=u.createElement(Sr,{before:e.question,after:t.question,title:"Question",showAlignmentOptions:!1,showSeparator:!0}),s=u.createElement(xr,{before:e.answerArea,after:t.answerArea,title:"Question extras"}),a=m.default.times(n,(function(r){return u.createElement(Sr,{before:r<e.hints.length?e.hints[r]:void 0,after:r<t.hints.length?t.hints[r]:void 0,title:"Hint ".concat(r+1),showAlignmentOptions:!1,showSeparator:r<n-1,key:r})}));return u.createElement("div",{className:"framework-perseus"},r,s,a&&u.createElement("div",{className:"diff-separator"}),a)}}x(_r,"propTypes",{after:Tr.isRequired,before:Tr.isRequired});class Or extends u.Component{render(){const{afterOnly:e,beforeOnly:t,intersection:n,showSeparator:r}=this.props,s=n.concat(t).join("\n")+"\n",a=n.concat(e).join("\n")+"\n";return u.createElement("div",null,u.createElement(mr,{before:s,after:a,title:this.props.title}),r&&u.createElement("div",{className:"diff-separator"}))}}function Mr(e,t){let n=!0;for(let r=0;r<t.length;r++){if(r>=e.length)return!1;t[r]!==e[r]&&(n=!1)}return n}function Ar(e,t){if(e.length!==t.length)return!1;for(let n=0,r=e.length;n<r;n++)if(e[n]!==t[n])return!1;return!0}x(Or,"defaultProps",{afterOnly:[],beforeOnly:[],showSeparator:!1,title:"Question tags"});class Pr extends u.Component{static generateCompletePathsList(e,t,n,r,s){if("content"===r.type||"hint"===r.type||"tags"===r.type){const r=e.length>0&&Ar(s,e[0][1]),a=t.length>0&&Ar(s,t[0][1]);r&&a?(n.push(s),e.splice(0,1),t.splice(0,1)):r?(n.push(s),e.splice(0,1)):a&&(n.push(s),t.splice(0,1))}else if("array"===r.type){let a=0,i=s.concat(a);for(;e.length>0&&Mr(e[0][1],i)||t.length>0&&Mr(t[0][1],i);)Pr.generateCompletePathsList(e,t,n,r.elementShape,i),a++,i=s.concat(a)}else if("object"===r.type){const a=Object.keys(r.shape);for(let i=0;i<a.length;i++){const o=s.concat([a[i]]);Pr.generateCompletePathsList(e,t,n,r.shape[a[i]],o)}}}render(){const{before:t,after:n,shape:r,tags:s}=this.props,a=[],i=[];e.buildMapper().setContentMapper(((e,t,n)=>a.push([e,n]))).setHintMapper(((e,t,n)=>a.push([e,n]))).setTagsMapper(((e,t,n)=>a.push([e,n]))).mapTree(e.itemToTree(t),r),e.buildMapper().setContentMapper(((e,t,n)=>i.push([e,n]))).setHintMapper(((e,t,n)=>i.push([e,n]))).setTagsMapper(((e,t,n)=>i.push([e,n]))).mapTree(e.itemToTree(n),r);const o=a.slice(),l=i.slice(),c=[];Pr.generateCompletePathsList(o,l,c,r,[]);const p=c.length,h=c.map(((t,n)=>{const r="tags"===t[t.length-1],o=function(e){const t=[];for(let n=0;n<e.length;n++)"number"==typeof e[n]?t.push((e[n]+1).toString()+":"):t.push(e[n]);return t.join(" ")}(t);let l=a.find((e=>Ar(e[1],t))),c=i.find((e=>Ar(e[1],t)));if(r){l||(l=[[],t]),c||(c=[[],t]);const e=[];Array.isArray(l[0])&&l[0].forEach((t=>{"string"==typeof t&&e.push(s.idToName(t))}));const r=[];Array.isArray(c[0])&&c[0].forEach((e=>{"string"==typeof e&&r.push(s.idToName(e))}));const a=e.filter((e=>r.includes(e))),i=e.filter((e=>!r.includes(e))),h=r.filter((t=>!e.includes(t)));return u.createElement(Or,{beforeOnly:i,afterOnly:h,intersection:a,title:o,showSeparator:n<p-1,key:n})}return l||(l=[e.buildEmptyItemTreeForShape(e.shapes.content),t]),c||(c=[e.buildEmptyItemTreeForShape(e.shapes.content),t]),u.createElement(Sr,{before:l[0],after:c[0],title:o,showAlignmentOptions:!1,showSeparator:n<p-1,key:n})}));return u.createElement("div",{className:"framework-perseus"},h)}}const{InfoTip:Dr,InlineIcon:Ir}=e.components,{iconCircleArrowDown:Rr,iconCircleArrowUp:zr,iconPlus:Lr,iconTrash:Fr}=e.icons;class Ur extends u.Component{constructor(){super(...arguments),x(this,"handleChange",(e=>{this.props.onChange({replace:e.target.checked})})),x(this,"focus",(()=>{this.refs.editor.focus()})),x(this,"getSaveWarnings",(()=>this.refs.editor.getSaveWarnings())),x(this,"serialize",(e=>this.refs.editor.serialize(e)))}render(){return u.createElement("div",{className:"perseus-hint-editor "+this.props.className},this.props.showTitle&&u.createElement("div",{className:"pod-title"},"Hint"),u.createElement(Fn,{ref:"editor",key:this.props.itemId,apiOptions:this.props.apiOptions,widgets:this.props.widgets||void 0,content:this.props.content||void 0,images:this.props.images,replace:this.props.replace,placeholder:"Type your hint here...",imageUploader:this.props.imageUploader,onChange:this.props.onChange}),u.createElement("div",{className:"hint-controls-container clearfix"},this.props.showMoveButtons&&u.createElement("span",{className:"reorder-hints"},u.createElement("button",{type:"button",className:this.props.isLast?"hidden":"",onClick:m.default.partial(this.props.onMove,1)},u.createElement(Ir,Rr))," ",u.createElement("button",{type:"button",className:this.props.isFirst?"hidden":"",onClick:m.default.partial(this.props.onMove,-1)},u.createElement(Ir,zr))," ",this.props.isLast&&u.createElement(Dr,null,u.createElement("p",null,"The last hint is automatically bolded."))),u.createElement("input",{type:"checkbox",checked:this.props.replace,onChange:this.handleChange}),"Replace previous hint",this.props.showRemoveButton&&u.createElement("button",{type:"button",className:"remove-hint simple-button orange",onClick:this.props.onRemove},u.createElement(Ir,Fr),"Remove this hint"," ")))}}x(Ur,"defaultProps",{className:"",content:"",replace:!1,showMoveButtons:!0,showTitle:!0,showRemoveButton:!0});class qr extends u.Component{constructor(){super(...arguments),x(this,"updatePreview",(()=>{const e=this.props.isLast&&!/\*\*/.test(this.props.hint.content);this.refs.frame.sendNewData({type:"hint",data:{hint:this.props.hint,bold:e,pos:this.props.pos,apiOptions:this.props.apiOptions,linterContext:{contentType:"hint",highlightLint:this.props.highlightLint,paths:this.props.contentPaths}}})})),x(this,"getSaveWarnings",(()=>this.refs.editor.getSaveWarnings())),x(this,"serialize",(e=>this.refs.editor.serialize(e))),x(this,"focus",(()=>{this.refs.editor.focus()}))}componentDidMount(){this.updatePreview()}componentDidUpdate(){this.updatePreview()}render(){const e="phone"===this.props.deviceType||"tablet"===this.props.deviceType;return u.createElement("div",{className:"perseus-combined-hint-editor perseus-editor-row"},u.createElement("div",{className:"perseus-editor-left-cell"},u.createElement(Ur,{ref:"editor",itemId:this.props.itemId,isFirst:this.props.isFirst,isLast:this.props.isLast,widgets:this.props.hint.widgets,content:this.props.hint.content,images:this.props.hint.images,replace:this.props.hint.replace,imageUploader:this.props.imageUploader,onChange:this.props.onChange,onRemove:this.props.onRemove,onMove:this.props.onMove,apiOptions:this.props.apiOptions})),u.createElement("div",{className:"perseus-editor-right-cell"},u.createElement(k,{deviceType:this.props.deviceType,nochrome:!0},u.createElement(Vn,{ref:"frame",datasetKey:"mobile",datasetValue:e,seamless:!0,url:this.props.previewURL}))))}}x(qr,"defaultProps",{highlightLint:!1});class Wr extends u.Component{constructor(){super(...arguments),x(this,"handleHintChange",((e,t,n,r)=>{const s=m.default(this.props.hints).clone();s[e]=m.default.extend({},this.serializeHint(e,{keepDeletedWidgets:!0}),t),this.props.onChange({hints:s},n,r)})),x(this,"handleHintRemove",(e=>{const t=m.default(this.props.hints).clone();t.splice(e,1),this.props.onChange({hints:t})})),x(this,"handleHintMove",((e,t)=>{const n=m.default(this.props.hints).clone(),r=n.splice(e,1)[0];n.splice(e+t,0,r),this.props.onChange({hints:n},(()=>{this.refs["hintEditor"+(e+t)].focus()}))})),x(this,"addHint",(()=>{const e=m.default(this.props.hints).clone().concat([{content:""}]);this.props.onChange({hints:e},(()=>{const t=e.length-1;this.refs["hintEditor"+t].focus()}))})),x(this,"getSaveWarnings",(()=>m.default.chain(this.props.hints).map(((e,t)=>m.default.map(this.refs["hintEditor"+t].getSaveWarnings(),(e=>"Hint "+(t+1)+": "+e)))).flatten(!0).value())),x(this,"serialize",(e=>this.props.hints.map(((t,n)=>this.serializeHint(n,e))))),x(this,"serializeHint",((e,t)=>this.refs["hintEditor"+e].serialize(t)))}render(){const{itemId:e,hints:t}=this.props,n=m.default.map(t,(function(n,r){return u.createElement(qr,{ref:"hintEditor"+r,key:"hintEditor"+r,isFirst:0===r,isLast:r+1===t.length,itemId:e,hint:n,pos:r,imageUploader:this.props.imageUploader,onChange:this.handleHintChange.bind(this,r),onRemove:this.handleHintRemove.bind(this,r),onMove:this.handleHintMove.bind(this,r),deviceType:this.props.deviceType,apiOptions:this.props.apiOptions,highlightLint:this.props.highlightLint,previewURL:this.props.previewURL,contentPaths:[]})}),this);return u.createElement("div",{className:"perseus-hints-editor perseus-editor-table"},n,u.createElement("div",{className:"perseus-editor-row"},u.createElement("div",{className:"add-hint-container perseus-editor-left-cell"},u.createElement("button",{type:"button",className:"add-hint simple-button orange",onClick:this.addHint},u.createElement(Ir,Lr)," Add a hint"))))}}x(Wr,"HintEditor",Ur),x(Wr,"defaultProps",{onChange:()=>{},hints:[],highlightLint:!1});const{InfoTip:Vr}=e.components;class jr extends u.Component{constructor(){super(...arguments),x(this,"serialize",(()=>({calculator:this.props.calculator,chi2Table:this.props.chi2Table,periodicTable:this.props.periodicTable,tTable:this.props.tTable,zTable:this.props.zTable})))}render(){return u.createElement("div",{className:"perseus-answer-editor"},u.createElement("div",{className:"perseus-answer-options"},u.createElement("div",null,u.createElement("label",null,"Show calculator:"," ",u.createElement("input",{type:"checkbox",checked:this.props.calculator,onChange:e=>{this.props.onChange({calculator:e.target.checked})}})),u.createElement(Vr,null,"Use the calculator when completing difficult calculations is NOT the intent of the question. DON’T use the calculator when testing the student’s ability to complete different types of computations.")),u.createElement("div",null,u.createElement("label",null,"Show periodic table:"," ",u.createElement("input",{type:"checkbox",checked:this.props.periodicTable,onChange:e=>{this.props.onChange({periodicTable:e.target.checked})}})),u.createElement(Vr,null,"This provides the student with the ability to view a periodic table of the elements, e.g., for answering chemistry questions.")),u.createElement("div",null,u.createElement("label",null,"Show z table (statistics):"," ",u.createElement("input",{type:"checkbox",checked:this.props.zTable,onChange:e=>{this.props.onChange({zTable:e.target.checked})}})),u.createElement(Vr,null,"This provides the student with the ability to view a table of critical values for the z distribution, e.g. for answering statistics questions.")),u.createElement("div",null,u.createElement("label",null,"Show t table (statistics):"," ",u.createElement("input",{type:"checkbox",checked:this.props.tTable,onChange:e=>{this.props.onChange({tTable:e.target.checked})}})),u.createElement(Vr,null,"This provides the student with the ability to view a table of critical values for the Student's t distribution, e.g. for answering statistics questions.")),u.createElement("div",null,u.createElement("label",null,"Show chi-squared table (statistics):"," ",u.createElement("input",{type:"checkbox",checked:this.props.chi2Table,onChange:e=>{this.props.onChange({chi2Table:e.target.checked})}})),u.createElement(Vr,null,"This provides the student with the ability to view a table of critical values for the chi-squared distribution, e.g. for answering statistics questions."))))}}x(jr,"propTypes",{calculator:f.default.bool,chi2Table:f.default.bool,onChange:f.default.func.isRequired,periodicTable:f.default.bool,tTable:f.default.bool,zTable:f.default.bool}),x(jr,"defaultProps",{calculator:!1,chi2Table:!1,periodicTable:!1,tTable:!1,zTable:!1});const Br=e.itemDataVersion;class $r extends u.Component{constructor(){super(...arguments),x(this,"updateProps",((e,t,n)=>{const r=m.default(this.props).pick("question","answerArea");this.props.onChange(m.default(r).extend(e),t,n)})),x(this,"triggerPreviewUpdate",(e=>{this.refs.frame.sendNewData(e)})),x(this,"handleEditorChange",((e,t,n)=>{const r=m.default.extend({},this.props.question,e);this.updateProps({question:r},t,n)})),x(this,"handleItemExtrasChange",((e,t,n)=>{const r=m.default.extend({},this.props.answerArea,e);this.updateProps({answerArea:r},t,n)})),x(this,"getSaveWarnings",(()=>this.refs.questionEditor.getSaveWarnings())),x(this,"serialize",(e=>({question:this.refs.questionEditor.serialize(e),answerArea:this.refs.itemExtrasEditor.serialize(e),itemDataVersion:Br})))}render(){const e="phone"===this.props.deviceType||"tablet"===this.props.deviceType;return u.createElement("div",{className:"perseus-editor-table"},u.createElement("div",{className:"perseus-editor-row perseus-question-container"},u.createElement("div",{className:"perseus-editor-left-cell"},u.createElement("div",{className:"pod-title"},"Question"),u.createElement(Fn,C({ref:"questionEditor",key:this.props.itemId,placeholder:"Type your question here...",className:"perseus-question-editor",imageUploader:this.props.imageUploader,onChange:this.handleEditorChange,apiOptions:this.props.apiOptions,showWordCount:!0},this.props.question))),u.createElement("div",{className:"perseus-editor-right-cell"},u.createElement("div",{id:"problemarea"},u.createElement(k,{deviceType:this.props.deviceType,nochrome:!0},u.createElement(Vn,{ref:"frame",key:this.props.deviceType,datasetKey:"mobile",datasetValue:e,seamless:!0,url:this.props.previewURL})),u.createElement("div",{id:"hintsarea",className:"hintsarea",style:{display:"none"}})))),u.createElement("div",{className:"perseus-editor-row perseus-answer-container"},u.createElement("div",{className:"perseus-editor-left-cell"},u.createElement("div",{className:"pod-title"},"Question extras"),u.createElement(jr,C({ref:"itemExtrasEditor",onChange:this.handleItemExtrasChange},this.props.answerArea))),u.createElement("div",{className:"perseus-editor-right-cell"},u.createElement("div",{id:"answer_area"}))))}}x($r,"defaultProps",{onChange:()=>{},question:{},answerArea:{}});const{HUD:Hr}=e.components;class Gr extends u.Component{constructor(e){super(e),x(this,"_isMounted",void 0),x(this,"rendererMountNode",void 0),x(this,"renderer",void 0),x(this,"toggleJsonMode",(()=>{this.setState({json:this.serialize({keepDeletedWidgets:!0})},(()=>{this.props.onChange({jsonMode:!this.props.jsonMode})}))})),x(this,"handleChange",((e,t,n)=>{const r=m.default(this.props).pick("question","hints","answerArea");m.default(r).extend(e),this.props.onChange(r,t,n)})),x(this,"changeJSON",(e=>{this.setState({json:e}),this.props.onChange(e)})),this.state={json:m.default.pick(this.props,"question","answerArea","hints","itemDataVersion"),gradeMessage:"",wasAnswered:!1,highlightLint:!0},this._isMounted=!1}componentDidMount(){this._isMounted=!0,this.rendererMountNode=document.createElement("div"),this.updateRenderer()}componentDidUpdate(){setTimeout((()=>{this.updateRenderer()}))}componentWillUnmount(){this._isMounted=!1}updateRenderer(){const e=!this.props.developerMode||!this.props.jsonMode;if(!this._isMounted||!e)return;const t="phone"===this.props.previewDevice||"tablet"===this.props.previewDevice,n={...this.getApiOptions(),customKeypad:t,isMobile:t};this.refs.itemEditor.triggerPreviewUpdate({type:"question",data:m.default({item:this.serialize(),apiOptions:n,initialHintsVisible:0,device:this.props.previewDevice,linterContext:{contentType:"exercise",highlightLint:this.state.highlightLint,paths:this.props.contentPaths||[]},reviewMode:!0,legacyPerseusLint:this.refs.itemEditor.getSaveWarnings()}).extend(m.default(this.props).pick("workAreaSelector","solutionAreaSelector","hintsAreaSelector","problemNum"))})}getApiOptions(){return{...e.ApiOptions.defaults,...this.props.apiOptions}}getSaveWarnings(){const e=this.refs.itemEditor.getSaveWarnings(),t=this.refs.hintsEditor.getSaveWarnings();return e.concat(t)}serialize(e){return this.props.jsonMode?this.state.json:m.default.extend(this.refs.itemEditor.serialize(e),{hints:this.refs.hintsEditor.serialize(e)})}scorePreview(){return this.renderer?this.renderer.scoreInput():null}render(){let t="framework-perseus";const n="phone"===this.props.previewDevice||"tablet"===this.props.previewDevice,r={...this.getApiOptions(),customKeypad:n,isMobile:n};return r.isMobile&&(t+=" "+e.ClassNames.MOBILE),u.createElement("div",{id:"perseus",className:t},u.createElement("div",{style:{marginBottom:10}},this.props.developerMode&&u.createElement("span",null,u.createElement("label",null," ","Developer JSON Mode:"," ",u.createElement("input",{type:"checkbox",checked:this.props.jsonMode,onChange:this.toggleJsonMode}))," "),!this.props.jsonMode&&u.createElement(nr,{deviceType:this.props.previewDevice,onViewportSizeChanged:this.props.onPreviewDeviceChange}),!this.props.jsonMode&&u.createElement(Hr,{message:"Style warnings",enabled:this.state.highlightLint,onClick:()=>{this.setState({highlightLint:!this.state.highlightLint})}})),this.props.developerMode&&this.props.jsonMode&&u.createElement("div",null,u.createElement(N,{multiLine:!0,value:this.state.json,onChange:this.changeJSON})),(!this.props.developerMode||!this.props.jsonMode)&&u.createElement($r,{ref:"itemEditor",itemId:this.props.itemId,question:this.props.question,answerArea:this.props.answerArea,imageUploader:this.props.imageUploader,onChange:this.handleChange,wasAnswered:this.state.wasAnswered,gradeMessage:this.state.gradeMessage,deviceType:this.props.previewDevice,apiOptions:r,previewURL:this.props.previewURL}),(!this.props.developerMode||!this.props.jsonMode)&&u.createElement(Wr,{ref:"hintsEditor",itemId:this.props.itemId,hints:this.props.hints,imageUploader:this.props.imageUploader,onChange:this.handleChange,deviceType:this.props.previewDevice,apiOptions:r,previewURL:this.props.previewURL,highlightLint:this.state.highlightLint}))}}x(Gr,"defaultProps",{developerMode:!1,jsonMode:!1,onChange:()=>{}});const{findContentNodesInItem:Yr,findHintNodesInItem:Kr,inferItemShape:Jr}=e.MultiItems;function Xr(t,n){const r=e.PerseusMarkdown.parse(t);e.PerseusMarkdown.traverseContent(r,(function(e){"image"===e.type&&n.push(e.target)}))}function Zr(e,t){e&&e.backgroundImage&&e.backgroundImage.url&&t.push(e.backgroundImage.url)}function Qr(t){const n=[];return m.default.each(t,(t=>{e.traverse(t,(e=>{Xr(e,n)}),(e=>function(e,t){e.options&&("categorizer"===e.type?(m.default.each(e.options.items,(function(e){Xr(e,t)})),m.default.each(e.options.categories,(function(e){Xr(e,t)}))):"image"===e.type?(Xr(e.options.title,t),Xr(e.options.caption,t)):"matcher"===e.type?(m.default.each(e.options.left,(function(e){Xr(e,t)})),m.default.each(e.options.right,(function(e){Xr(e,t)})),m.default.each(e.options.labels,(function(e){Xr(e,t)}))):"matrix"===e.type?(Xr(e.options.prefix,t),Xr(e.options.suffix,t)):"orderer"===e.type?m.default.each(e.options.options,(function(e){Xr(e.content,t)})):"passage"===e.type?Xr(e.options.passageTitle,t):"radio"===e.type?m.default.each(e.options.choices,(function(e){Xr(e.content,t)})):"sorter"===e.type?m.default.each(e.options.correct,(function(e){Xr(e,t)})):"table"===e.type&&m.default.each(e.options.headers,(function(e){Xr(e,t)})),"grapher"===e.type?Zr(e.options.graph,t):"image"===e.type||"interactive-graph"===e.type?Zr(e.options,t):"measurer"===e.type&&e.options.image?t.push(e.options.image.url):"plotter"===e.type?t.push(e.options.picUrl):"transformer"===e.type&&Zr(e.options.graph,t))}(e,n)))})),n}var es,ts={findImagesInArticles:function(e){return Qr(e)},findImagesInItemData:function(e){let t=[];if(e._multi){const n=Jr(e);Yr(e,n,(e=>t.push(e))),Kr(e,n,(e=>t.push(e)))}else t=[e.question,...e.hints];return Qr(t)}},ns={exports:{}};es=function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var s=t[r]={i:r,l:!1,exports:{}};return e[r].call(s.exports,s,s.exports,n),s.l=!0,s.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1)}([function(e,t){var n=function(e){return e===Object(e)},r=function(){for(var e={},t=0;t<arguments.length;t++){var n=arguments[t];if(n)for(var r in n)e[r]=n[r]}return e};e.exports={isObject:n,merge:r,clone:function(e){return n(e)?Array.isArray(e)?e.slice():r(e):e}}},function(e,t,n){var r=n(0),s=r.clone,a=r.isObject,i=r.merge,o=n(2),l=n(3),c=n(4),p=function(e){return Array.isArray(e)?o:a(e)?l:"string"==typeof e?c:void 0},h=function(e){if(e instanceof h)return e;if(!(this instanceof h))return new h(e);var t=p(e);this._wrapped=t.thaw?t.thaw(e):e};h.prototype.freeze=function(){var e=this._wrapped,t=p(e);return t.freeze?t.freeze(e):e},h.prototype.zoom=function(e){return void 0===this._zoomStack&&(this._zoomStack=[]),this._zoomStack.push({zoom:e,wrapped:this._wrapped}),this._wrapped=h(this._wrapped).get(e),this},h.prototype.deZoom=function(){var e=this._zoomStack.pop();return this._wrapped=h(e.wrapped).set(e.zoom,this._wrapped).freeze(),this},h.prototype.get=function(e){for(var t=this._wrapped,n=0;n<e.length;n++)t=p(t).get(t,e[n]);return t},h.prototype.mod=function(e,t){var n=this._wrapped,r=s(n),a=p(n);if(0===e.length)this._wrapped=t(this._wrapped);else if(1===e.length)this._wrapped=a.mod(r,e[0],t);else{var i=e[0],o=e.slice(1);r[i]=h(n[i]).mod(o,t).freeze(),this._wrapped=r}return this},h.prototype.merge=function(e,t){return this._wrapped=h(this._wrapped).mod(e,(function(e){return i(e,t)})).freeze(),this},h.prototype.del=function(e){var t=this._wrapped,n=p(t);if(1===e.length)this._wrapped=n.del(t,e[0]);else{var r=e[0],a=e.slice(1),i=s(t);i[r]=h(t[r]).del(a).freeze(),this._wrapped=i}return this},h.prototype.set=function(e,t){return this.mod(e,(function(){return t}))},e.exports=h},function(e,t){e.exports={get:function(e,t){return e[t]},set:function(e,t,n){var r=e.splice();return r[t]=n,r},mod:function(e,t,n){var r=e.slice();return r[t]=n(e[t]),r},del:function(e,t){var n=e.slice();return n.splice(t,1),n}}},function(e,t,n){var r=n(0).clone;e.exports={get:function(e,t){return e[t]},set:function(e,t,n){var s=r(e);return s[t]=n,s},mod:function(e,t,n){var s=r(e);return s[t]=n(e[t]),s},del:function(e,t){var n=r(e);return delete n[t],n}}},function(e,t){e.exports={get:function(e,t){return e[t]},set:function(e,t,n){var r=e.splice();return r[t]=n,r},mod:function(e,t,n){var r=e.splice();return r[t]=n(e[t]),r},del:function(e,t){var n=e.slice();return n.splice(t),n}}}])};var rs=ce(ns.exports=es());class ss extends u.Component{render(){const{children:e,color:t,onClick:n,...r}=this.props;return u.createElement("div",C({className:o.css(as.baseButton,"green"===t&&as.green,"orange"===t&&as.orange),onClick:n},r),e)}}x(ss,"propTypes",{children:f.default.node,color:f.default.oneOf(["orange","green"]),onClick:f.default.func}),x(ss,"defaultProps",{children:null,color:"green",onClick:()=>{}});const as=o.StyleSheet.create({baseButton:{top:"0",fontSize:"11px",padding:"3px 10px",backgroundRepeat:"repeat-x",borderColor:"\n rgba(0, 0, 0, 0.1)\n rgba(0, 0, 0, 0.1)\n rgba(0, 0, 0, 0.25)\n ",color:"#ffffff",borderRadius:"3px",lineHeight:"15px",cursor:"pointer",transition:"box-shadow ease-in-out 0.15s",appearance:"none",textDecoration:"none",textAlign:"center",":hover":{boxShadow:"0 1px 1px rgba(0, 0, 0, 0.35),\n inset 0 0 50px 5px rgba(255, 255, 255, 0.2)"}},green:{border:"1px solid #7fab07",backgroundColor:"#80ac07",backgroundImage:"linear-gradient(to bottom, #8aba08, #719807)",":hover":{borderBottomColor:"#547105",backgroundColor:"#719807"}},orange:{border:"1px solid #d45704",backgroundColor:"#d55704",backgroundImage:"linear-gradient(to bottom, #e35d04, #c04f03)",":hover":{borderBottomColor:"#983e03",backgroundColor:"#c04f03"}}}),{InlineIcon:is}=e.components,{iconChevronDown:os,iconTrash:ls}=e.icons,{MultiRenderer:cs}=e.MultiItems;class ps extends u.Component{constructor(){super(...arguments),x(this,"_handleSelectMode",(e=>{if(this.props.onChange){const t=e.target.value;this.props.onChange(t)}}))}render(){return u.createElement("label",null,"Mode:"," ",u.createElement("select",{value:this.props.currentMode,onChange:this._handleSelectMode},u.createElement("option",{value:"edit"},"Edit"),u.createElement("option",{value:"preview"},"Preview"),u.createElement("option",{value:"json"},"Dev-only JSON")))}}function hs(e){return e.replace(/[A-Z]/g,(e=>" "+e.toLowerCase()))}function us(e){return e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()}function ds(e){return"s"===e.charAt(e.length-1)?e.slice(0,-1):e}function ms(e){return["_multi",...e]}const fs=e=>{let{depth:t,...n}=e;const r=Math.min(t,5)+1,s="h".concat(r);return u.createElement(s,n)},gs=e=>{const{shape:t,data:n,path:r,actions:s,name:a,controls:i,...o}=e,l=a||hs(r[r.length-1]||""),c=u.createElement(Es,C({},o,{shape:t,data:n,path:r,actions:s})),p=r.join(".");return"array"===t.type?u.createElement(ys,{key:p,name:l,controls:i,path:r,shape:t,actions:s},c):"object"===t.type?u.createElement(bs,{key:p,name:l,controls:i,path:r},c):u.createElement(vs,{key:p,name:l,controls:i,path:r,shape:t},c)},vs=e=>{let{name:t,controls:n,children:r,path:s,shape:a}=e;const i=("content"===a.type||"hint"===a.type)&&u.createElement("div",{className:o.css(_s.containerHeader)},u.createElement(fs,{depth:s.length,className:o.css(_s.containerTitle)},us(t)));return u.createElement("div",{className:o.css(_s.container)},u.createElement("span",{className:o.css(_s.row,_s.rowHeading)},u.createElement("div",{className:o.css(_s.columnLeft)},u.createElement("div",{className:"pod-title "+o.css(_s.containerHeader)},u.createElement("div",{className:o.css(_s.containerTitle)},us(t)),n)),u.createElement("div",{className:o.css(_s.columnRight)},i)),r)},ys=e=>{const{name:t,controls:n,children:r,path:s,shape:a,actions:i}=e;return u.createElement("div",{className:o.css(_s.container)},n&&u.createElement("div",{className:o.css(_s.columnLeft,_s.containerHeader)},n),u.createElement("div",null,r),u.createElement("div",{className:o.css(_s.columnLeft)},u.createElement("a",{href:"javascript:void 0",onClick:()=>i.addArrayElement(s,a.elementShape)},"Add a ",ds(t))))},bs=e=>{let{name:t,controls:n,children:r,path:s}=e;const a=u.createElement("div",{className:o.css(_s.containerHeader)},u.createElement(fs,{depth:s.length,className:o.css(_s.containerTitle)},us(t)),n),i=(t||n)&&u.createElement("div",{className:o.css(_s.containerHeader,_s.previewCollectionHeader)},u.createElement(fs,{depth:s.length,className:o.css(_s.containerTitle)},us(t))),l=a&&i;return u.createElement("div",{className:o.css(_s.container)},l&&u.createElement("span",{className:o.css(_s.row)},u.createElement("div",{className:o.css(_s.columnLeft)},a),u.createElement("div",{className:o.css(_s.columnRight)},i)),u.createElement("div",{className:o.css(s.length>0&&_s.contentIndent)},r))},Es=e=>{const{shape:t,data:n,...r}=e;return"content"===t.type?u.createElement(xs,C({shape:t,data:n},r)):"hint"===t.type?u.createElement(Cs,C({shape:t,data:n},r)):"tags"===t.type?u.createElement(Ss,C({shape:t,data:n},r)):"array"===t.type?u.createElement(ks,C({shape:t,data:n},r)):"object"===t.type?u.createElement(Ns,C({shape:t,data:n},r)):null},ws=e=>class extends u.Component{constructor(){super(...arguments),x(this,"stickynessTimer",void 0),x(this,"state",{sticky:!1}),x(this,"updateStickiness",(()=>{const e=b.default.findDOMNode(this).offsetHeight>window.innerHeight;e!==this.state.sticky&&this.setState({sticky:e})}))}componentDidMount(){this.stickynessTimer=setInterval(this.updateStickiness,1e3),this.updateStickiness()}componentWillUnmount(){clearInterval(this.stickynessTimer)}render(){return u.createElement(e,C({},this.props,{sticky:this.state.sticky}))}},xs=ws((e=>{const{data:t,path:n,actions:r,apiOptions:s,renderers:a,sticky:i}=e,l=u.createElement("div",{className:"framework-perseus"},rs(a).get(n));return u.createElement("span",null,u.createElement("div",{className:o.css(_s.row)},u.createElement("div",{className:o.css(_s.columnLeft)},u.createElement("div",{className:o.css(i&&_s.sticky)},u.createElement(Fn,C({},t,{onChange:e=>r.mergeValueAtPath(n,e),apiOptions:s})))),u.createElement("div",{className:o.css(_s.columnRight)},u.createElement("div",{className:o.css(i&&_s.sticky)},l))))})),Cs=ws((e=>{const{data:t,path:n,actions:r,apiOptions:s,renderers:a,sticky:i}=e,l=u.createElement("div",{className:"framework-perseus"},rs(a).get(n));return u.createElement("div",{className:o.css(_s.row)},u.createElement("div",{className:o.css(_s.columnLeft)},u.createElement("div",{className:o.css(i&&_s.sticky)},u.createElement(Ur,C({},t,{className:o.css(_s.hintEditor),onChange:e=>r.mergeValueAtPath(n,e),apiOptions:s,showTitle:!1,showRemoveButton:!1,showMoveButtons:!1,onRemove:()=>{},onMove:e=>{},isFirst:!0,isLast:!0})))),u.createElement("div",{className:o.css(_s.columnRight)},u.createElement("div",{className:o.css(i&&_s.sticky)},l)))})),Ss=e=>{const{data:t,path:n,actions:r,apiOptions:s}=e,{GroupMetadataEditor:a}=s;return null==a?null:u.createElement("div",{className:o.css(_s.columnLeft)},u.createElement("div",{className:o.css(_s.tagsEditor)},u.createElement(a,{value:t,onChange:e=>r.setValueAtPath(n,e),showTitle:!1})))},ks=e=>{const{shape:t,data:n,path:r,actions:s,...a}=e,i=ds(hs(r[r.length-1])),l=t.elementShape.type,c="content"===l||"hint"===l,p=n.map(((e,l)=>{const p=r.concat(l),h=[l>0&&u.createElement("div",{key:"moveArrayElementUp",className:o.css(_s.control)},u.createElement(ss,{color:"orange",title:"Move up",onClick:()=>s.moveArrayElementUp(p)},u.createElement("div",{className:o.css(_s.verticalFlip)},u.createElement(is,os)))),l<n.length-1&&u.createElement("div",{key:"moveArrayElementDown",className:o.css(_s.control)},u.createElement(ss,{color:"orange",title:"Move down",onClick:()=>s.moveArrayElementDown(p)},u.createElement(is,os))),u.createElement("div",{key:"removeArrayElement",className:o.css(_s.control)},u.createElement(ss,{color:"orange",title:"Delete",onClick:()=>s.removeArrayElement(p)},u.createElement(is,ls)))];return u.createElement("div",{key:l,className:o.css(_s.arrayElement,!c&&_s.arrayElementAndNotLeaf)},u.createElement(gs,C({},a,{key:l,shape:t.elementShape,data:e,path:p,actions:s,name:"".concat(i," ").concat(l+1),controls:h})))}));return u.createElement("div",null,p)},Ns=e=>{const{shape:t,data:n,path:r,...s}=e,a=Object.keys(t.shape).map((e=>u.createElement("div",{key:e,className:o.css(_s.objectElement)},u.createElement(gs,C({},s,{shape:t.shape[e],data:n[e],path:r.concat(e)})))));return u.createElement("div",null,a)};class Ts extends u.Component{constructor(){super(...arguments),x(this,"layout",void 0),x(this,"_renderLayout",(()=>{const{Layout:e,apiOptions:t,item:n}=this.props;return u.createElement(e,{ref:e=>this.layout=e,item:n,apiOptions:t})})),x(this,"_renderJson",(()=>u.createElement("div",null,u.createElement(ps,{currentMode:this.props.editorMode,onChange:e=>this.props.onChange({editorMode:e})}),u.createElement(N,{multiLine:!0,value:this.props.item,onChange:e=>this.props.onChange({item:e})})))),x(this,"_renderPreview",(()=>u.createElement("div",null,u.createElement(ps,{currentMode:this.props.editorMode,onChange:e=>this.props.onChange({editorMode:e})}),this._renderLayout()))),x(this,"mergeValueAtPath",((e,t)=>{this.props.onChange({item:rs(this.props.item).merge(ms(e),t).freeze()})})),x(this,"setValueAtPath",((e,t)=>{this.props.onChange({item:rs(this.props.item).set(ms(e),t).freeze()})})),x(this,"addArrayElement",((t,n)=>{const r=rs(this.props.item).get(ms(t)).length,s=t.concat(r),a=e.buildEmptyItemTreeForShape(n);this.props.onChange({item:rs(this.props.item).set(ms(s),a).freeze()})})),x(this,"removeArrayElement",(e=>{this.props.onChange({item:rs(this.props.item).del(ms(e)).freeze()})})),x(this,"moveArrayElementDown",(e=>{const t=e[e.length-1]+1,n=e.slice(0,-1).concat(t),r=rs(this.props.item).get(ms(e)),s=rs(this.props.item).get(ms(n));this.props.onChange({item:rs(this.props.item).set(ms(e),s).set(ms(n),r).freeze()})})),x(this,"moveArrayElementUp",(e=>{const t=e[e.length-1],n=e.slice(0,-1).concat(t-1);this.moveArrayElementDown(n)})),x(this,"_renderEdit",(()=>{const t={...e.ApiOptions.defaults,...this.props.apiOptions},{item:n}=this.props,r=this.props.Layout.shape;return u.createElement("div",{className:"perseus-multirenderer-editor"},u.createElement(ps,{currentMode:this.props.editorMode,onChange:e=>this.props.onChange({editorMode:e})}),u.createElement(cs,{item:n,shape:r,apiOptions:t},(s=>{let{renderers:a}=s;return u.createElement(gs,{shape:r,data:e.itemToTree(n),path:[],actions:this,apiOptions:t,renderers:a})})))})),x(this,"score",(()=>{if(this.layout)return this.layout.score()})),x(this,"getSerializedState",(()=>{if(this.layout)return this.layout.getSerializedState()})),x(this,"restoreSerializedState",(e=>{this.layout&&this.layout.restoreSerializedState(e)})),x(this,"_renderContent",(()=>{switch(this.props.editorMode){case"json":return this._renderJson();case"preview":return this._renderPreview();case"edit":return this._renderEdit();default:return u.createElement(ps,{currentMode:this.props.editorMode,onChange:e=>this.props.onChange({editorMode:e})})}}))}render(){return u.createElement("div",{id:"perseus"},this._renderContent())}}const _s=o.StyleSheet.create({container:{},editor:{width:"100%"},treePreview:{position:"relative"},verticalFlip:{transform:"scaleY(-1)"},control:{marginLeft:12},containerHeader:{alignItems:"flex-end",display:"flex",flexDirection:"row"},previewCollectionHeader:{marginBottom:16},containerTitle:{flexGrow:1,margin:0},contentIndent:{marginLeft:8},hintEditor:{paddingBottom:0},arrayElement:{marginBottom:16},arrayElementAndNotLeaf:{borderBottom:"1px solid #ccc",":first-child":{borderTop:"1px solid #ccc",paddingTop:16}},objectElement:{marginBottom:16},tagsEditor:{border:"1px solid #ddd",padding:"5px 10px"},row:{display:"flex",position:"relative"},columnLeft:{width:360,marginRight:30,position:"relative"},columnRight:{flex:1,marginLeft:30,position:"relative"},sticky:{position:"sticky",top:33},rowHeading:{position:"sticky",backgroundColor:"white",width:"100%",zIndex:101,top:-1}}),Os=g.default({displayName:"StatefulArticleEditor",getInitialState:function(){return m.default({}).extend(this.props,{mode:"edit",onChange:this.handleChange,ref:"editor",screen:"phone"})},componentDidMount:function(){this._isMounted=!0},UNSAFE_componentWillReceiveProps:function(e){this.setState(m.default(e).omit("onChange","ref"))},componentWillUnmount:function(){this._isMounted=!1},getSaveWarnings:function(){return this.refs.editor.getSaveWarnings()},serialize:function(){return this.refs.editor.serialize()},handleChange:function(e,t){this._isMounted&&this.setState(e,t)},scorePreview:function(){return this.refs.editor.scorePreview()},render:function(){const{mode:e,screen:t}=this.state;return u.createElement("div",null,u.createElement("div",{style:Ms.controlBar},u.createElement("span",{style:Ms.controls},"Mode:"," ",u.createElement("span",{onClick:()=>this.setState({mode:"edit"}),style:"edit"===e?Ms.controlSelected:Ms.control},"EDIT")," | ",u.createElement("span",{onClick:()=>this.setState({mode:"preview"}),style:"preview"===e?Ms.controlSelected:Ms.control},"PREVIEW")," | ",u.createElement("span",{onClick:()=>this.setState({mode:"json"}),style:"json"===e?Ms.controlSelected:Ms.control},"JSON")),u.createElement("span",{style:Ms.controls},"Screen:"," ",u.createElement("span",{onClick:()=>this.setState({screen:"phone"}),style:"phone"===t?Ms.controlSelected:Ms.control},"PHONE")," | ",u.createElement("span",{onClick:()=>this.setState({screen:"tablet"}),style:"tablet"===t?Ms.controlSelected:Ms.control},"TABLET")," | ",u.createElement("span",{onClick:()=>this.setState({screen:"desktop"}),style:"desktop"===t?Ms.controlSelected:Ms.control},"DESKTOP"))),u.createElement("div",{style:Ms.editor},u.createElement(Kn,this.state)))}}),Ms={controlBar:{marginBottom:25,marginTop:5},controls:{marginRight:10},controlSelected:{cursor:"default",fontWeight:700},control:{cursor:"pointer"},editor:{marginTop:-20}},As=g.default({displayName:"StatefulEditorPage",propTypes:{componentClass:f.default.func},getDefaultProps:function(){return{componentClass:Gr}},render:function(){const e=this.props.componentClass;return u.createElement(e,this.state)},getInitialState:function(){return m.default({}).extend(m.default.omit(this.props,"componentClass"),{onChange:this.handleChange,ref:"editor"})},componentDidMount:function(){this._isMounted=!0},componentWillUnmount:function(){this._isMounted=!1},UNSAFE_componentWillReceiveProps:function(e){this.setState(m.default(e).pick("apiOptions","imageUploader","developerMode","problemNum","previewDevice","frameSource"))},getSaveWarnings:function(){return this.refs.editor.getSaveWarnings()},serialize:function(){return this.refs.editor.serialize()},handleChange:function(e,t){this._isMounted&&this.setState(e,t)},scorePreview:function(){return this.refs.editor.scorePreview()}}),{PropCheckBox:Ps,TextListEditor:Ds}=e.components,Is=e.Categorizer.widget;class Rs extends u.Component{constructor(){var t;super(...arguments),t=this,x(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),x(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){return u.createElement("div",null,u.createElement("div",{className:"perseus-widget-row"},u.createElement(Ps,{label:"Randomize item order",labelAlignment:"right",randomizeItems:this.props.randomizeItems,onChange:this.props.onChange})),"Categories:",u.createElement(Ds,{options:this.props.categories,onChange:e=>{this.change("categories",e)},layout:"horizontal"}),"Items:",u.createElement(Ds,{options:this.props.items,onChange:e=>{this.change({items:e,values:m.default.first(this.props.values,e.length)})},layout:"vertical"}),u.createElement(Is,{apiOptions:this.props.apiOptions,items:this.props.items,categories:this.props.categories,values:this.props.values,onChange:e=>{this.props.onChange(e)},trackInteraction:function(){}}))}}x(Rs,"propTypes",{...e.Changeable.propTypes,apiOptions:e.ApiOptions.propTypes,items:f.default.arrayOf(f.default.string),categories:f.default.arrayOf(f.default.string),values:f.default.arrayOf(f.default.number),randomizeItems:f.default.bool}),x(Rs,"widgetName","categorizer"),x(Rs,"defaultProps",{items:[],categories:[],values:[],randomizeItems:!1});class zs extends u.Component{constructor(e){super(e),x(this,"handleChange",(e=>{this.setState({value:e.target.value})})),x(this,"handleBlur",(e=>{this.props.onChange(e.target.value)})),this.state={value:this.props.value}}UNSAFE_componentWillReceiveProps(e){this.setState({value:e.value})}render(){return u.createElement("input",{className:this.props.className,style:this.props.style,type:"text",value:this.state.value,onChange:this.handleChange,onBlur:this.handleBlur})}}const{InfoTip:Ls,PropCheckBox:Fs}=e.components;class Us extends u.Component{constructor(){var t;super(...arguments),t=this,x(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),x(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){return u.createElement("fieldset",{className:"pair-editor"},u.createElement("label",null,"Name:"," ",u.createElement(zs,{value:this.props.name,onChange:this.change("name")})),u.createElement("label",null," ","Value:"," ",u.createElement(zs,{value:this.props.value,onChange:this.change("value")})))}}x(Us,"propTypes",{...e.Changeable.propTypes,name:f.default.string,value:f.default.string}),x(Us,"defaultProps",{name:"",value:""});class qs extends u.Component{constructor(){var t;super(...arguments),t=this,x(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),x(this,"handlePairChange",((e,t)=>{const n=this.props.pairs.slice();n[e]=t;const r=n[n.length-1];r.name&&r.value&&n.push({name:"",value:""}),this.change("pairs",n)})),x(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){const e=m.default.map(this.props.pairs,((e,t)=>u.createElement(Us,{key:t,name:e.name,value:e.value,onChange:this.handlePairChange.bind(this,t)})));return u.createElement("div",null,e)}}x(qs,"propTypes",{...e.Changeable.propTypes,pairs:f.default.arrayOf(f.default.shape({name:f.default.string,value:f.default.string})).isRequired});const Ws=/khanacademy\.org\/computer-programming\/[^\/]+\/(\d+)/;class Vs extends u.Component{constructor(){var t;super(...arguments),t=this,x(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),x(this,"_handleSettingsChange",(e=>{this.change({settings:e.pairs})})),x(this,"_handleProgramIDChange",(t=>{t=function(e){const t=Ws.exec(e);return t&&(e=t[1]),e}(t);const{isDevServer:n,InitialRequestUrl:r}=e.Dependencies.getDependencies(),s=n?r.origin:"https://www.khanacademy.org",a="".concat(s,"/api/internal/scratchpads/").concat(t);v.default.getJSON(a).done((e=>{const n=e.userAuthoredContentType;this.change({width:e.width,height:e.height,programID:t,programType:n})})).fail(((n,r,s)=>{e.Log.error("Error retrieving scratchpad info for program ID ",e.Errors.TransientService,{cause:s,loggedMetadata:{textStatus:r,programID:t}}),this.change({width:400,height:400,programID:t,programType:null})}))})),x(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){return u.createElement("div",null,u.createElement("label",null,"Url or Program ID:"," ",u.createElement(zs,{value:this.props.programID,onChange:this._handleProgramIDChange})),u.createElement("br",null),u.createElement(Fs,{label:"Show Editor",showEditor:this.props.showEditor,onChange:this.props.onChange}),u.createElement(Ls,null,'If you show the editor, you should use the "full-width" alignment to make room for the width of the editor.'),u.createElement("br",null),u.createElement(Fs,{label:"Show Buttons",showButtons:this.props.showButtons,onChange:this.props.onChange}),u.createElement("br",null),u.createElement("label",null,"Settings:",u.createElement(qs,{name:"settings",pairs:this.props.settings,onChange:this._handleSettingsChange}),u.createElement(Ls,null,"Settings that you add here are available to the program as an object returned by ",u.createElement("code",null,"Program.settings()"))))}}x(Vs,"propTypes",{...e.Changeable.propTypes}),x(Vs,"widgetName","cs-program"),x(Vs,"defaultProps",{programID:"",programType:null,settings:[{name:"",value:""}],showEditor:!1,showButtons:!1,width:400,height:400});const{TextInput:js}=e.components;class Bs extends u.Component{constructor(){var t;super(...arguments),t=this,x(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),x(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){return u.createElement("div",{className:"perseus-widget-definition-editor"},u.createElement("a",{href:"https://docs.google.com/document/d/1udaPef4imOfTMhmLDlWq4SM0mxL0r3YHFZE-5J1uGfo",target:"_blank"},"Definition style guide"),u.createElement("div",{className:"perseus-widget-row"},u.createElement("label",null,"Word to be defined:"," ",u.createElement(js,{value:this.props.togglePrompt,onChange:this.change("togglePrompt"),placeholder:"define me"}))),u.createElement("div",{className:"perseus-widget-row"},u.createElement(Fn,{apiOptions:this.props.apiOptions,content:this.props.definition,widgetEnabled:!1,placeholder:"definition goes here",onChange:e=>{const t={};m.default.has(e,"content")&&(t.definition=e.content),this.change(t)}})))}}x(Bs,"propTypes",{...e.Changeable.propTypes,togglePrompt:f.default.string,definition:f.default.string,apiOptions:f.default.any}),x(Bs,"widgetName","definition"),x(Bs,"defaultProps",{togglePrompt:"",definition:""});const{InfoTip:$s,InlineIcon:Hs}=e.components,{iconPlus:Gs,iconTrash:Ys}=e.icons;class Ks extends u.Component{constructor(){super(...arguments),x(this,"onPlaceholderChange",(e=>{const t=e.target.value;this.props.onChange({placeholder:t})})),x(this,"onCorrectChange",(e=>{const t=m.default.map(this.props.choices,(function(t,n){return m.default.extend({},t,{correct:n===e})}));this.props.onChange({choices:t})})),x(this,"onContentChange",((e,t)=>{const n=this.props.choices.slice(),r=m.default.clone(n[e]);r.content=t.target.value,n[e]=r,this.props.onChange({choices:n})})),x(this,"addChoice",(e=>{e.preventDefault();const t=this.props.choices;this.props.onChange({choices:t.concat([{content:"",correct:!1}])},this.focus.bind(this,t.length))})),x(this,"removeChoice",((e,t)=>{t.preventDefault();const n=m.default(this.props.choices).clone();n.splice(e,1),this.props.onChange({choices:n})})),x(this,"focus",(e=>(b.default.findDOMNode(this.refs["editor"+e]).focus(),!0))),x(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){const e=m.default.uniqueId("perseus_dropdown_");return u.createElement("div",{className:"perseus-widget-dropdown"},u.createElement("div",{className:"dropdown-info"},"Dropdown",u.createElement($s,null,u.createElement("p",null,"The drop down is useful for making inequalities in a custom format. We normally use the symbols ","<",","," ",">",', ≤, ≥ (in that order) which you can copy into the choices. When possible, use the "multiple choice" answer type instead.'))),u.createElement("div",{className:"dropdown-placeholder"},u.createElement("input",{type:"text",placeholder:"Placeholder value",value:this.props.placeholder,onChange:this.onPlaceholderChange}),u.createElement($s,null,u.createElement("p",null,"This value will appear as the drop down default. It should give the user some indication of the values available in the drop down itself, e.g., Yes/No/Maybe."))),u.createElement("div",{className:"clearfix"}),u.createElement("ul",{className:"dropdown-choices"},this.props.choices.map((function(t,n){const r=t.correct?"correct":"incorrect";return u.createElement("li",{key:""+n},u.createElement("div",null,u.createElement("input",{ref:"radio"+n,type:"radio",name:e,checked:t.correct?"checked":"",onChange:this.onCorrectChange.bind(this,n),value:n}),u.createElement("input",{type:"text",ref:"editor"+n,onChange:this.onContentChange.bind(this,n),className:r,value:t.content}),u.createElement("a",{href:"#",className:"simple-button orange",onClick:this.removeChoice.bind(this,n)},u.createElement("span",{className:"remove-choice"},u.createElement(Hs,Ys)))))}),this)),u.createElement("div",{className:"add-choice-container"},u.createElement("a",{href:"#",className:"simple-button orange",onClick:this.addChoice},u.createElement(Hs,Gs)," Add a choice"," ")))}}x(Ks,"propTypes",{choices:f.default.arrayOf(f.default.shape({content:f.default.string,correct:f.default.bool})),placeholder:f.default.string}),x(Ks,"widgetName","dropdown"),x(Ks,"defaultProps",{placeholder:"",choices:[{content:"",correct:!1}]});var Js=Math.pow(2,-42);function Xs(e){return m.default.isNumber(e)&&!m.default.isNaN(e)}function Zs(e,t,n){return null==e||null==t?e===t:e===t||(null==n&&(n=1e-9),Math.abs(e-t)<n)}function Qs(e,t){var n=Math.pow(10,t);return Math.round(e*n)/n}function ea(e,t){return Math.round(e/t)*t}function ta(e,t){return Math.floor(e/t)*t}function na(e,t){return Math.ceil(e/t)*t}var ra=Object.freeze({__proto__:null,DEFAULT_TOLERANCE:1e-9,EPSILON:Js,is:Xs,equal:Zs,sign:function(e,t){return Zs(e,0,t)?0:Math.abs(e)/e},isInteger:function(e,t){return Zs(Math.round(e),e,t)},round:Qs,roundTo:ea,floorTo:ta,ceilTo:na,toFraction:function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Js,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1e3,r=[1,0],s=[0,1],a=Math.floor(e),i=e-a;s[0]<=n;){if(Zs(r[0]/s[0],e,t))return[r[0],s[0]];r=[a*r[0]+r[1],r[0]],s=[a*s[0]+s[1],s[0]],i=1/i-(a=Math.floor(1/i))}return[e,1]}});function sa(e){return e.reduce(((e,t)=>e+t),0)}function aa(e){return e.reduce(((e,t)=>e*t),1)}function ia(e,t){return!!m.default.isArray(e)&&(void 0===t||e.length===t)&&e.every(Xs)}function oa(e){return da(e,1/la(e))}function la(e){return Math.sqrt(ca(e,e))}function ca(e,t){return sa(m.default.zip(e,t).map(aa))}function pa(){var e=m.default.zip(...arguments);return e.map(sa)}function ha(e,t){return m.default.zip(e,t).map((e=>e[0]-e[1]))}function ua(e){return e.map((e=>-e))}function da(e,t){return e.map((e=>e*t))}function ma(e,t,n){return m.default.zip(e,t).every((e=>Zs(e[0],e[1],n)))}function fa(e,t,n){return!(!Zs(la(e),0,n)&&!Zs(la(t),0,n))||ma(e=oa(e),t=oa(t),n)}function ga(e,t,n){return fa(e,t,n)||fa(e,ua(t),n)}function va(e){var t=la(e),n=Math.atan2(e[1],e[0]);return n<0&&(n+=2*Math.PI),[t,n]}function ya(e){var t=va(e);return[t[0],180*t[1]/Math.PI]}function ba(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return[e*Math.cos(t),e*Math.sin(t)]}function Ea(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return ba(e,t*Math.PI/180)}function wa(e,t){var n=va(e),r=n[1]+t;return ba(n[0],r)}function xa(e,t){var n=ya(e),r=n[1]+t;return Ea(n[0],r)}function Ca(e,t){return Math.acos(ca(e,t)/(la(e)*la(t)))}function Sa(e,t){return da(t,ca(e,t)/ca(t,t))}function ka(e,t){return e.map(((e,n)=>Qs(e,t[n]||t)))}function Na(e,t){return e.map(((e,n)=>ea(e,t[n]||t)))}function Ta(e,t){return e.map(((e,n)=>ta(e,t[n]||t)))}function _a(e,t){return e.map(((e,n)=>na(e,t[n]||t)))}var Oa=Object.freeze({__proto__:null,is:ia,normalize:oa,length:la,dot:ca,add:pa,subtract:ha,negate:ua,scale:da,equal:ma,codirectional:fa,collinear:ga,polarRadFromCart:va,polarDegFromCart:ya,cartFromPolarRad:ba,cartFromPolarDeg:Ea,rotateRad:wa,rotateDeg:xa,angleRad:Ca,angleDeg:function(e,t){return 180*Ca(e,t)/Math.PI},projection:Sa,round:ka,roundTo:Na,floorTo:Ta,ceilTo:_a});function Ma(e,t){var n=ha(t[1],t[0]),r=ha(e,t[0]);return la(ha(Sa(r,n),r))}function Aa(e,t){var n=ha(t[1],t[0]),r=ha(e,t[0]),s=ha(da(Sa(r,n),2),r);return pa(t[0],s)}var Pa=ia,Da=pa,Ia=pa,Ra=ha,za=ma,La=va,Fa=ya,Ua=ba,qa=Ea,Wa=ka,Va=Na,ja=Ta,Ba=_a,$a=Object.freeze({__proto__:null,rotateRad:function(e,t,n){return void 0===n?wa(e,t):pa(n,wa(ha(e,n),t))},rotateDeg:function(e,t,n){return void 0===n?xa(e,t):pa(n,xa(ha(e,n),t))},distanceToPoint:function(e,t){return la(ha(e,t))},distanceToLine:Ma,reflectOverLine:Aa,compare:function(e,t,n){if(e.length!==t.length)return e.length-t.length;for(var r=0;r<e.length;r++)if(!Zs(e[r],t[r],n))return e[r]-t[r];return 0},is:Pa,addVector:Da,addVectors:Ia,subtractVector:Ra,equal:za,polarRadFromCart:La,polarDegFromCart:Fa,cartFromPolarRad:Ua,cartFromPolarDeg:qa,round:Wa,roundTo:Va,floorTo:ja,ceilTo:Ba}),Ha=Object.freeze({__proto__:null,distanceToPoint:function(e,t){return Ma(t,e)},reflectPoint:function(e,t){return Aa(t,e)},midpoint:function(e){return[(e[0][0]+e[1][0])/2,(e[0][1]+e[1][1])/2]},equal:function(e,t,n){var r=ha(e[1],e[0]);return!!ga(r,ha(t[1],t[0]),n)&&(!!za(e[0],t[0])||ga(r,ha(t[0],e[0]),n))}}),Ga=Object.freeze({__proto__:null,equal:function(e,t,n){var r=ha(e[1],e[0]),s=ha(t[1],t[0]),a=za(e[0],t[0]),i=fa(r,s,n);return a&&i}});const{Graphie:Ya}=e.components,Ka=Ya.MovablePoint;class Ja extends u.Component{constructor(){var t;super(...arguments),t=this,x(this,"getUserInput",(()=>e.WidgetJsonifyDeprecated.getUserInput.call(this))),x(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),x(this,"movePoint",(e=>{this.change({coord:e})})),x(this,"_getGridConfig",(t=>m.default.map(t.step,(function(n,r){return e.Util.gridDimensionConfig(n,t.range[r],t.box[r],t.gridStep[r])})))),x(this,"setupGraphie",((e,t)=>{const n=this._getGridConfig(t);e.graphInit({range:t.range,scale:m.default.pluck(n,"scale"),axisArrows:"<->",labelFormat:function(e){return"\\small{"+e+"}"},gridStep:t.gridStep,tickStep:m.default.pluck(n,"tickStep"),labelStep:1,unityLabels:m.default.pluck(n,"unityLabel")}),e.label([0,t.range[1][1]],t.labels[1],"above")})),x(this,"simpleValidate",(e=>Ja.validate(this.getUserInput(),e)))}static validate(e,t){return null==e.coord?{type:"invalid",message:null}:$a.equal(e.coord,t.correct)?{type:"points",earned:1,total:1,message:null}:{type:"points",earned:0,total:1,message:null}}render(){return u.createElement(Ya,{ref:"graphie",box:this.props.graph.box,range:this.props.graph.range,options:this.props.graph,setup:this.setupGraphie,setDrawingAreaAvailable:this.props.apiOptions.setDrawingAreaAvailable},u.createElement(Ka,{pointSize:5,coord:this.props.coord||[0,0],constraints:[Ka.constraints.snap(),Ka.constraints.bound()],onMove:this.movePoint}))}}x(Ja,"propTypes",{...e.Changeable.propTypes,apiOptions:e.ApiOptions.propTypes,graph:f.default.object.isRequired,coord:f.default.arrayOf(f.default.number)}),x(Ja,"defaultProps",{coord:null,graph:{box:[400,400],labels:["x","y"],range:[[-10,10],[-10,10]],step:[1,1],gridStep:[1,1],valid:!0,backgroundImage:null,markings:"grid",showProtractor:!1}});var Xa={name:"example-graphie-widget",displayName:"Example Graphie Widget",hidden:!0,widget:Ja};const Za=Xa.widget;class Qa extends u.Component{constructor(){var t;super(...arguments),t=this,x(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),x(this,"handleChange",(e=>{e.coord&&this.change({correct:e.coord})})),x(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){return u.createElement("div",null,u.createElement(Za,{graph:this.props.graph,coord:this.props.correct,onChange:this.handleChange,apiOptions:this.props.apiOptions}))}}x(Qa,"propTypes",{...e.Changeable.propTypes}),x(Qa,"widgetName","example-graphie-widget"),x(Qa,"defaultProps",{correct:[4,4],graph:{box:[340,340],labels:["x","y"],range:[[-10,10],[-10,10]],step:[1,1],gridStep:[1,1],valid:!0,backgroundImage:null,markings:"grid",showProtractor:!1}});class ei extends u.Component{constructor(){var t;super(...arguments),t=this,x(this,"handleAnswerChange",(e=>{this.change({correct:e.target.value})})),x(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),x(this,"focus",(()=>(this.refs.input.focus(),!0))),x(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){return u.createElement("div",null,u.createElement("label",null,"Correct answer:",u.createElement("input",{value:this.props.correct,onChange:this.handleAnswerChange,ref:"input"})))}}x(ei,"propTypes",{...e.Changeable.propTypes}),x(ei,"widgetName","example-widget"),x(ei,"defaultProps",{correct:""});const{TextInput:ti}=e.components;class ni extends u.Component{constructor(){var t;super(...arguments),t=this,x(this,"state",{}),x(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),x(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){return u.createElement("div",{className:"perseus-widget-explanation-editor"},u.createElement("div",{className:"perseus-widget-row"},u.createElement("label",null,"Prompt to show explanation:"," ",u.createElement(ti,{value:this.props.showPrompt,onChange:this.change("showPrompt")}))),u.createElement("div",{className:"perseus-widget-row"},u.createElement("label",null,"Prompt to hide explanation:"," ",u.createElement(ti,{value:this.props.hidePrompt,onChange:this.change("hidePrompt")}))),u.createElement("div",{className:"perseus-widget-row"},u.createElement(Fn,{apiOptions:this.props.apiOptions,content:this.props.explanation,widgets:this.props.widgets,widgetEnabled:!0,immutableWidgets:!1,onChange:e=>{const t={};m.default.has(e,"content")&&(t.explanation=e.content),m.default.has(e,"widgets")&&(t.widgets=e.widgets),this.change(t)}})))}}x(ni,"propTypes",{...e.Changeable.propTypes,showPrompt:f.default.string,hidePrompt:f.default.string,explanation:f.default.string,widgets:f.default.object,apiOptions:f.default.any}),x(ni,"widgetName","explanation"),x(ni,"defaultProps",{showPrompt:"Explain",hidePrompt:"Hide explanation",explanation:"explanation goes here\n\nmore explanation",widgets:{}});var ri=function(){var e=function(e,t,n,r){for(n=n||{},r=e.length;r--;n[e[r]]=t);return n},t=[1,11],n=[1,9],r=[8,17],s=[6,11],a=[6,11,13,17],i={trace:function(){},yy:{},symbols_:{error:2,unitvalue:3,magnitude:4,unit:5,EOF:6,float:7,POW:8,int:9,multatoms:10,DIV:11,expatom:12,MUL:13,atom:14,"^":15,nat:16,ATOM:17,FLOAT:18,NAT:19,NEG:20,$accept:0,$end:1},terminals_:{2:"error",6:"EOF",8:"POW",11:"DIV",13:"MUL",15:"^",17:"ATOM",18:"FLOAT",19:"NAT",20:"NEG"},productions_:[0,[3,3],[3,2],[4,3],[4,1],[5,3],[5,1],[10,3],[10,2],[10,1],[12,3],[12,1],[14,1],[7,1],[7,1],[16,1],[9,2],[9,1]],performAction:function(e,t,n,r,s,a,i){var o=a.length-1;switch(s){case 1:return{type:"unitMagnitude",magnitude:a[o-2],unit:a[o-1]};case 2:return{type:"unitStandalone",unit:a[o-1]};case 3:this.$=a[o-2]+"e"+a[o];break;case 4:case 13:case 14:case 15:case 17:this.$=a[o];break;case 5:this.$={num:a[o-2],denom:a[o]};break;case 6:this.$={num:a[o],denom:null};break;case 7:this.$=[a[o-2]].concat(a[o]);break;case 8:this.$=[a[o-1]].concat(a[o]);break;case 9:this.$=[a[o]];break;case 10:this.$={name:a[o-2],pow:a[o]};break;case 11:this.$={name:a[o],pow:1};break;case 12:this.$=e;break;case 16:this.$="-"+a[o]}},table:[{3:1,4:2,5:3,7:4,10:5,12:8,14:10,16:7,17:t,18:[1,6],19:n},{1:[3]},{5:12,10:5,12:8,14:10,17:t},{6:[1,13]},{8:[1,14],17:[2,4]},{6:[2,6],11:[1,15]},e(r,[2,13]),e(r,[2,14]),e(s,[2,9],{12:8,14:10,10:17,13:[1,16],17:t}),e([6,8,11,13,17],[2,15]),e(a,[2,11],{15:[1,18]}),e([6,11,13,15,17],[2,12]),{6:[1,19]},{1:[2,2]},{9:20,19:[1,22],20:[1,21]},{10:23,12:8,14:10,17:t},{10:24,12:8,14:10,17:t},e(s,[2,8]),{16:25,19:n},{1:[2,1]},{17:[2,3]},{19:[1,26]},{17:[2,17]},{6:[2,5]},e(s,[2,7]),e(a,[2,10]),{17:[2,16]}],defaultActions:{13:[2,2],19:[2,1],20:[2,3],22:[2,17],23:[2,5],26:[2,16]},parseError:function(e,t){if(!t.recoverable)throw new Error(e);this.trace(e)},parse:function(e){var t=this,n=[0],r=[null],s=[],a=this.table,i="",o=0,l=0,c=2,p=1,h=s.slice.call(arguments,1),u=Object.create(this.lexer),d={yy:{}};for(var m in this.yy)Object.prototype.hasOwnProperty.call(this.yy,m)&&(d.yy[m]=this.yy[m]);u.setInput(e,d.yy),d.yy.lexer=u,d.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var f=u.yylloc;s.push(f);var g=u.options&&u.options.ranges;function v(){var e;return"number"!=typeof(e=u.lex()||p)&&(e=t.symbols_[e]||e),e}"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var y,b,E,w,x,C,S,k,N={};;){if(b=n[n.length-1],this.defaultActions[b]?E=this.defaultActions[b]:(null==y&&(y=v()),E=a[b]&&a[b][y]),void 0===E||!E.length||!E[0]){var T="";for(x in k=[],a[b])this.terminals_[x]&&x>c&&k.push("'"+this.terminals_[x]+"'");T=u.showPosition?"Parse error on line "+(o+1)+":\n"+u.showPosition()+"\nExpecting "+k.join(", ")+", got '"+(this.terminals_[y]||y)+"'":"Parse error on line "+(o+1)+": Unexpected "+(y==p?"end of input":"'"+(this.terminals_[y]||y)+"'"),this.parseError(T,{text:u.match,token:this.terminals_[y]||y,line:u.yylineno,loc:f,expected:k})}if(E[0]instanceof Array&&E.length>1)throw new Error("Parse Error: multiple actions possible at state: "+b+", token: "+y);switch(E[0]){case 1:n.push(y),r.push(u.yytext),s.push(u.yylloc),n.push(E[1]),y=null,l=u.yyleng,i=u.yytext,o=u.yylineno,f=u.yylloc;break;case 2:if(C=this.productions_[E[1]][1],N.$=r[r.length-C],N._$={first_line:s[s.length-(C||1)].first_line,last_line:s[s.length-1].last_line,first_column:s[s.length-(C||1)].first_column,last_column:s[s.length-1].last_column},g&&(N._$.range=[s[s.length-(C||1)].range[0],s[s.length-1].range[1]]),void 0!==(w=this.performAction.apply(N,[i,l,o,d.yy,E[1],r,s].concat(h))))return w;C&&(n=n.slice(0,-1*C*2),r=r.slice(0,-1*C),s=s.slice(0,-1*C)),n.push(this.productions_[E[1]][0]),r.push(N.$),s.push(N._$),S=a[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},o={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,n=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var s=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var n,r,s;if(this.options.backtrack_lexer&&(s={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(s.yylloc.range=this.yylloc.range.slice(0))),(r=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],n=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in s)this[a]=s[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),a=0;a<s.length;a++)if((n=this._input.match(this.rules[s[a]]))&&(!t||n[0].length>t[0].length)){if(t=n,r=a,this.options.backtrack_lexer){if(!1!==(e=this.test_match(n,s[a])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,s[r]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(e,t,n,r){switch(n){case 0:return 11;case 1:return"(";case 2:return")";case 3:return 8;case 4:return 15;case 5:return 13;case 6:return 18;case 7:return 19;case 8:return 20;case 9:case 10:case 11:return 17;case 12:break;case 13:return 6}},rules:[/^(?:\/)/,/^(?:\()/,/^(?:\))/,/^(?:(\*|x|\u00d7|\u2219|\u22c5|\u00b7)\s*10\s*\^)/,/^(?:\^)/,/^(?:\*)/,/^(?:[0-9]+\.[0-9]+)/,/^(?:[0-9]+)/,/^(?:-)/,/^(?:\u00b0( ?)[cCfF])/,/^(?:fl\.? oz\.?)/,/^(?:[\u00b5]?([A-Za-z-]+|[\u2103\u2109\u212b]))/,/^(?:\s+)/,/^(?:$)/],conditions:{INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13],inclusive:!0}}};function l(){this.yy={}}return i.lexer=o,l.prototype=i,i.Parser=l,new l}(),si=ri,ai=function(){var e=function(e,t,n,r){for(n=n||{},r=e.length;r--;n[e[r]]=t);return n},t=[1,7],n=[1,17],r=[1,13],s=[1,14],a=[1,15],i=[1,32],o=[1,22],l=[1,23],c=[1,24],p=[1,25],h=[1,26],u=[1,33],d=[1,27],m=[1,28],f=[1,29],g=[1,30],v=[1,20],y=[1,36],b=[1,37],E=[5,6,8,10,33,35,41,43,45],w=[1,39],x=[1,40],C=[5,6,8,10,12,14,16,19,21,22,28,29,30,31,32,33,34,35,37,39,41,42,43,44,45,46],S=[10,16,19,21,22,28,29,30,31,32,34,37,39,42,43,44,46],k=[5,6,8,10,12,14,16,18,19,21,22,28,29,30,31,32,33,34,35,37,39,41,42,43,44,45,46],N={trace:function(){},yy:{},symbols_:{error:2,equation:3,expression:4,SIGN:5,EOF:6,additive:7,"+":8,multiplicative:9,"-":10,triglog:11,"*":12,negative:13,"/":14,trig:15,TRIG:16,trigfunc:17,"^":18,TRIGINV:19,logbase:20,ln:21,log:22,_:23,subscriptable:24,power:25,primitive:26,variable:27,VAR:28,CONST:29,INT:30,FLOAT:31,"{":32,"}":33,"(":34,")":35,function:36,FUNC:37,invocation:38,sqrt:39,"[":40,"]":41,abs:42,"|":43,"LEFT|":44,"RIGHT|":45,FRAC:46,$accept:0,$end:1},terminals_:{2:"error",5:"SIGN",6:"EOF",8:"+",10:"-",12:"*",14:"/",16:"TRIG",18:"^",19:"TRIGINV",21:"ln",22:"log",23:"_",28:"VAR",29:"CONST",30:"INT",31:"FLOAT",32:"{",33:"}",34:"(",35:")",37:"FUNC",39:"sqrt",40:"[",41:"]",42:"abs",43:"|",44:"LEFT|",45:"RIGHT|",46:"FRAC"},productions_:[0,[3,4],[3,2],[3,1],[4,1],[7,3],[7,3],[7,1],[9,2],[9,3],[9,3],[9,1],[13,2],[13,1],[15,1],[17,1],[17,3],[17,1],[20,1],[20,1],[20,3],[11,2],[11,2],[11,1],[25,3],[25,1],[27,1],[24,3],[24,1],[24,1],[24,1],[24,1],[24,3],[24,3],[36,1],[38,4],[38,4],[38,7],[38,4],[38,3],[38,3],[38,4],[26,1],[26,1],[26,7]],performAction:function(e,t,n,r,s,a,i){var o=a.length-1;switch(s){case 1:return new r.Eq(a[o-3],a[o-2],a[o-1]);case 2:return a[o-1];case 3:return new r.Add([]);case 4:case 7:case 11:case 13:case 15:case 20:case 23:case 25:case 42:case 43:this.$=a[o];break;case 5:this.$=r.Add.createOrAppend(a[o-2],a[o]);break;case 6:this.$=r.Add.createOrAppend(a[o-2],r.Mul.handleNegative(a[o],"subtract"));break;case 8:this.$=r.Mul.fold(r.Mul.createOrAppend(a[o-1],a[o]));break;case 9:this.$=r.Mul.fold(r.Mul.createOrAppend(a[o-2],a[o]));break;case 10:this.$=r.Mul.fold(r.Mul.handleDivide(a[o-2],a[o]));break;case 12:this.$=r.Mul.handleNegative(a[o]);break;case 14:case 17:this.$=[e];break;case 16:this.$=a[o-2].concat(a[o]);break;case 18:this.$=r.Log.natural();break;case 19:this.$=r.Log.common();break;case 21:this.$=r.Trig.create(a[o-1],a[o]);break;case 22:this.$=r.Log.create(a[o-1],a[o]);break;case 24:this.$=new r.Pow(a[o-2],a[o]);break;case 26:case 34:this.$=e;break;case 27:this.$=new r.Var(a[o-2],a[o]);break;case 28:this.$=new r.Var(a[o]);break;case 29:this.$=new r.Const(e.toLowerCase());break;case 30:this.$=r.Int.create(Number(e));break;case 31:this.$=r.Float.create(Number(e));break;case 32:this.$=a[o-1].completeParse();break;case 33:this.$=a[o-1].completeParse().addHint("parens");break;case 35:case 36:this.$=r.Pow.sqrt(a[o-1]);break;case 37:this.$=new r.Pow.nthroot(a[o-1],a[o-4]);break;case 38:case 39:case 40:this.$=new r.Abs(a[o-1]);break;case 41:this.$=new r.Func(a[o-3],a[o-1]);break;case 44:this.$=r.Mul.handleDivide(a[o-4],a[o-1])}},table:[{3:1,4:2,6:[1,3],7:4,9:5,10:t,11:8,13:6,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},{1:[3]},{5:[1,34],6:[1,35]},{1:[2,3]},e([5,6],[2,4],{8:y,10:b}),e(E,[2,7],{17:9,20:10,25:11,15:12,26:16,24:18,38:19,27:21,36:31,11:38,12:w,14:x,16:n,19:r,21:s,22:a,28:i,29:o,30:l,31:c,32:p,34:h,37:u,39:d,42:m,44:g,46:v}),e(C,[2,11]),{10:t,11:8,13:41,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},e(C,[2,13]),{10:t,11:8,13:42,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},{10:t,11:8,13:43,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},e(C,[2,23]),e(S,[2,15],{18:[1,44]}),e(S,[2,17]),e(S,[2,18]),e(S,[2,19],{23:[1,45]}),e(C,[2,25],{18:[1,46]}),e([10,16,18,19,21,22,28,29,30,31,32,34,37,39,42,43,44,46],[2,14]),e(k,[2,42]),e(k,[2,43]),{32:[1,47]},e(k,[2,28],{23:[1,48]}),e(k,[2,29]),e(k,[2,30]),e(k,[2,31]),{7:49,9:5,10:t,11:8,13:6,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},{7:50,9:5,10:t,11:8,13:6,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},{32:[1,52],34:[1,51],40:[1,53]},{34:[1,54]},{7:55,9:5,10:t,11:8,13:6,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},{7:56,9:5,10:t,11:8,13:6,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},{34:[1,57]},e([5,6,8,10,12,14,16,18,19,21,22,23,28,29,30,31,32,33,34,35,37,39,41,42,43,44,45,46],[2,26]),{34:[2,34]},{4:58,7:4,9:5,10:t,11:8,13:6,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},{1:[2,2]},{9:59,10:t,11:8,13:6,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},{9:60,10:t,11:8,13:6,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},e(C,[2,8]),{10:t,11:8,13:61,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},{10:t,11:8,13:62,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},e(C,[2,12]),e(C,[2,21]),e(C,[2,22]),{10:t,11:8,13:63,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},{24:64,27:21,28:i,29:o,30:l,31:c,32:p,34:h},{10:t,11:8,13:65,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},{7:66,9:5,10:t,11:8,13:6,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},{24:67,27:21,28:i,29:o,30:l,31:c,32:p,34:h},{8:y,10:b,33:[1,68]},{8:y,10:b,35:[1,69]},{7:70,9:5,10:t,11:8,13:6,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},{7:71,9:5,10:t,11:8,13:6,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},{7:72,9:5,10:t,11:8,13:6,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},{7:73,9:5,10:t,11:8,13:6,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},{8:y,10:b,43:[1,74]},{8:y,10:b,45:[1,75]},{7:76,9:5,10:t,11:8,13:6,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},{6:[1,77]},e(E,[2,5],{17:9,20:10,25:11,15:12,26:16,24:18,38:19,27:21,36:31,11:38,12:w,14:x,16:n,19:r,21:s,22:a,28:i,29:o,30:l,31:c,32:p,34:h,37:u,39:d,42:m,44:g,46:v}),e(E,[2,6],{17:9,20:10,25:11,15:12,26:16,24:18,38:19,27:21,36:31,11:38,12:w,14:x,16:n,19:r,21:s,22:a,28:i,29:o,30:l,31:c,32:p,34:h,37:u,39:d,42:m,44:g,46:v}),e(C,[2,9]),e(C,[2,10]),e(S,[2,16]),e(S,[2,20]),e(C,[2,24]),{8:y,10:b,33:[1,78]},e(k,[2,27]),e(k,[2,32]),e(k,[2,33]),{8:y,10:b,35:[1,79]},{8:y,10:b,33:[1,80]},{8:y,10:b,41:[1,81]},{8:y,10:b,35:[1,82]},e(k,[2,39]),e(k,[2,40]),{8:y,10:b,35:[1,83]},{1:[2,1]},{32:[1,84]},e(k,[2,35]),e(k,[2,36]),{32:[1,85]},e(k,[2,38]),e(k,[2,41]),{7:86,9:5,10:t,11:8,13:6,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},{7:87,9:5,10:t,11:8,13:6,15:12,16:n,17:9,19:r,20:10,21:s,22:a,24:18,25:11,26:16,27:21,28:i,29:o,30:l,31:c,32:p,34:h,36:31,37:u,38:19,39:d,42:m,43:f,44:g,46:v},{8:y,10:b,33:[1,88]},{8:y,10:b,33:[1,89]},e(k,[2,44]),e(k,[2,37])],defaultActions:{3:[2,3],33:[2,34],35:[2,2],77:[2,1]},parseError:function(e,t){if(!t.recoverable)throw new Error(e);this.trace(e)},parse:function(e){var t=this,n=[0],r=[null],s=[],a=this.table,i="",o=0,l=0,c=2,p=1,h=s.slice.call(arguments,1),u=Object.create(this.lexer),d={yy:{}};for(var m in this.yy)Object.prototype.hasOwnProperty.call(this.yy,m)&&(d.yy[m]=this.yy[m]);u.setInput(e,d.yy),d.yy.lexer=u,d.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var f=u.yylloc;s.push(f);var g=u.options&&u.options.ranges;function v(){var e;return"number"!=typeof(e=u.lex()||p)&&(e=t.symbols_[e]||e),e}"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var y,b,E,w,x,C,S,k,N={};;){if(b=n[n.length-1],this.defaultActions[b]?E=this.defaultActions[b]:(null==y&&(y=v()),E=a[b]&&a[b][y]),void 0===E||!E.length||!E[0]){var T="";for(x in k=[],a[b])this.terminals_[x]&&x>c&&k.push("'"+this.terminals_[x]+"'");T=u.showPosition?"Parse error on line "+(o+1)+":\n"+u.showPosition()+"\nExpecting "+k.join(", ")+", got '"+(this.terminals_[y]||y)+"'":"Parse error on line "+(o+1)+": Unexpected "+(y==p?"end of input":"'"+(this.terminals_[y]||y)+"'"),this.parseError(T,{text:u.match,token:this.terminals_[y]||y,line:u.yylineno,loc:f,expected:k})}if(E[0]instanceof Array&&E.length>1)throw new Error("Parse Error: multiple actions possible at state: "+b+", token: "+y);switch(E[0]){case 1:n.push(y),r.push(u.yytext),s.push(u.yylloc),n.push(E[1]),y=null,l=u.yyleng,i=u.yytext,o=u.yylineno,f=u.yylloc;break;case 2:if(C=this.productions_[E[1]][1],N.$=r[r.length-C],N._$={first_line:s[s.length-(C||1)].first_line,last_line:s[s.length-1].last_line,first_column:s[s.length-(C||1)].first_column,last_column:s[s.length-1].last_column},g&&(N._$.range=[s[s.length-(C||1)].range[0],s[s.length-1].range[1]]),void 0!==(w=this.performAction.apply(N,[i,l,o,d.yy,E[1],r,s].concat(h))))return w;C&&(n=n.slice(0,-1*C*2),r=r.slice(0,-1*C),s=s.slice(0,-1*C)),n.push(this.productions_[E[1]][0]),r.push(N.$),s.push(N._$),S=a[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},T={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,n=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var s=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var n,r,s;if(this.options.backtrack_lexer&&(s={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(s.yylloc.range=this.yylloc.range.slice(0))),(r=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],n=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in s)this[a]=s[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),a=0;a<s.length;a++)if((n=this._input.match(this.rules[s[a]]))&&(!t||n[0].length>t[0].length)){if(t=n,r=a,this.options.backtrack_lexer){if(!1!==(e=this.test_match(n,s[a])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,s[r]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{flex:!0},performAction:function(e,t,n,r){switch(n){case 0:case 1:case 2:break;case 3:return"INT";case 4:return"FLOAT";case 5:case 15:return"^";case 6:case 7:case 8:case 9:return"*";case 10:case 11:return"/";case 12:case 13:return"-";case 14:return"+";case 16:case 18:return"(";case 17:case 19:return")";case 20:return"[";case 21:return"]";case 22:case 24:return"{";case 23:case 25:return"}";case 26:return"_";case 27:return"|";case 28:return"LEFT|";case 29:return"RIGHT|";case 30:return"!";case 31:return"SIGN";case 32:case 34:case 40:return t.yytext="<=","SIGN";case 33:case 35:case 41:return t.yytext=">=","SIGN";case 36:case 37:case 38:case 39:return t.yytext="<>","SIGN";case 42:case 43:return"FRAC";case 44:return"sqrt";case 45:return"abs";case 46:return"ln";case 47:return"log";case 48:case 49:case 50:case 51:return"TRIG";case 52:return t.yytext="sin","TRIG";case 53:return t.yytext="cos","TRIG";case 54:return t.yytext="tan","TRIG";case 55:return t.yytext="csc","TRIG";case 56:return t.yytext="sec","TRIG";case 57:return t.yytext="cot","TRIG";case 58:return t.yytext="arcsin","TRIG";case 59:return t.yytext="arccos","TRIG";case 60:return t.yytext="arctan","TRIG";case 61:return t.yytext="arccsc","TRIG";case 62:return t.yytext="arcsec","TRIG";case 63:return t.yytext="arccot","TRIG";case 64:case 65:return"TRIGINV";case 66:return t.yytext="sinh","TRIG";case 67:return t.yytext="cosh","TRIG";case 68:case 71:return t.yytext="tanh","TRIG";case 69:return t.yytext="csch","TRIG";case 70:return t.yytext="sech","TRIG";case 72:return"CONST";case 73:case 74:return t.yytext="pi","CONST";case 75:case 78:return"VAR";case 76:case 77:return t.yytext="theta","VAR";case 79:case 80:return t.yytext="phi","VAR";case 81:return e.symbolLexer(t.yytext);case 82:return"EOF";case 83:return"INVALID";case 84:console.log(t.yytext)}},rules:[/^(?:\s+)/,/^(?:\\space)/,/^(?:\\ )/,/^(?:[0-9]+\.?)/,/^(?:([0-9]+)?\.[0-9]+)/,/^(?:\*\*)/,/^(?:\*)/,/^(?:\\cdot|·)/,/^(?:\\times|×)/,/^(?:\\ast)/,/^(?:\/)/,/^(?:\\div|÷)/,/^(?:-)/,/^(?:−)/,/^(?:\+)/,/^(?:\^)/,/^(?:\()/,/^(?:\))/,/^(?:\\left\()/,/^(?:\\right\))/,/^(?:\[)/,/^(?:\])/,/^(?:\{)/,/^(?:\})/,/^(?:\\left\{)/,/^(?:\\right\})/,/^(?:_)/,/^(?:\|)/,/^(?:\\left\|)/,/^(?:\\right\|)/,/^(?:\!)/,/^(?:<=|>=|<>|<|>|=)/,/^(?:\\le)/,/^(?:\\ge)/,/^(?:\\leq)/,/^(?:\\geq)/,/^(?:=\/=)/,/^(?:\\ne)/,/^(?:\\neq)/,/^(?:≠)/,/^(?:≤)/,/^(?:≥)/,/^(?:\\frac)/,/^(?:\\dfrac)/,/^(?:sqrt|\\sqrt)/,/^(?:abs|\\abs)/,/^(?:ln|\\ln)/,/^(?:log|\\log)/,/^(?:sin|cos|tan)/,/^(?:csc|sec|cot)/,/^(?:sinh|cosh|tanh)/,/^(?:csch|sech|coth)/,/^(?:\\sin)/,/^(?:\\cos)/,/^(?:\\tan)/,/^(?:\\csc)/,/^(?:\\sec)/,/^(?:\\cot)/,/^(?:\\arcsin)/,/^(?:\\arccos)/,/^(?:\\arctan)/,/^(?:\\arccsc)/,/^(?:\\arcsec)/,/^(?:\\arccot)/,/^(?:arcsin|arccos|arctan)/,/^(?:arccsc|arcsec|arccot)/,/^(?:\\sinh)/,/^(?:\\cosh)/,/^(?:\\tanh)/,/^(?:\\csch)/,/^(?:\\sech)/,/^(?:\\coth)/,/^(?:pi)/,/^(?:π)/,/^(?:\\pi)/,/^(?:theta)/,/^(?:θ)/,/^(?:\\theta)/,/^(?:phi)/,/^(?:φ)/,/^(?:\\phi)/,/^(?:[a-zA-Z])/,/^(?:$)/,/^(?:.)/,/^(?:.)/],conditions:{INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84],inclusive:!0}}};function _(){this.yy={}}return N.lexer=T,_.prototype=N,N.Parser=_,new _}(),ii=function(){throw new Error("Abstract method - must override for expr: "+this.print())},oi=function(e){throw new Error(e)},li=function(e){return e!=e};function ci(){}function pi(){}function hi(){this.terms=1===arguments.length?arguments[0]:m.default.toArray(arguments)}function ui(){this.terms=1===arguments.length?arguments[0]:m.default.toArray(arguments)}function di(e,t){this.base=e,this.exp=t}function mi(e,t){this.base=e,this.power=t}function fi(e,t){this.type=e,this.arg=t}function gi(e){this.arg=e}function vi(e,t,n){this.left=e,this.type=t,this.right=n}function yi(){}function bi(e,t){this.symbol=e,this.arg=t}function Ei(e,t){this.symbol=e,this.subscript=t}function wi(e){this.symbol=e}function xi(){}function Ci(e,t){var n=e,r=t;r<0&&(n=-n,r=-r),this.n=n,this.d=r}function Si(e){this.n=e}function ki(e){this.n=e}m.default.extend(ci.prototype,{func:ii,args:ii,construct:function(e){var t=new this.func;return this.func.apply(t,e),t},recurse:function(e){var t=Array.prototype.slice.call(arguments,1),n=m.default.map(this.args(),(function(n){return m.default.isString(n)?n:n[e].apply(n,t)}));return this.construct(n)},eval:ii,codegen:ii,compile:function(){var e=this.codegen();try{return new Function("vars","return "+e+";")}catch(t){throw new Error("Function did not compile: "+e)}},print:ii,tex:ii,asTex:function(e){e=e||{},m.default.defaults(e,{display:!0,dynamic:!0,times:!1});var t=this.tex();return e.display&&(t="\\displaystyle "+t),e.dynamic&&(t=(t=t.replace(/\(/g,"\\left(")).replace(/\)/g,"\\right)")),e.times&&(t=t.replace(/\\cdot/g,"\\times")),t},name:function(){return this.func.name?this.func.name:this.func.toString().match(/^function\s*([^\s(]+)/)[1]},repr:function(){return this.name()+"("+m.default.map(this.args(),(function(e){return m.default.isString(e)?e:e.repr()})).join(",")+")"},strip:function(){return this.recurse("strip")},normalize:function(){return this.recurse("normalize")},expand:function(){return this.recurse("expand")},factor:function(e){return this.recurse("factor",e)},collect:function(e){return this.recurse("collect",e)},equals:function(e){return this.normalize().print()===e.normalize().print()},simplify:function(e){e=m.default.extend({once:!1},e);var t=this.factor(e),n=t.collect(e);t.equals(n)&&(n=this.collect(e));var r=n.expand(e),s=r.collect(e);r.equals(s)&&(s=n.collect(e));var a=s;return e.once||this.equals(a)?a:a.simplify(e)},isSimplified:function(){return this.equals(this.simplify())},exprArgs:function(){return m.default.filter(this.args(),(function(e){return e instanceof ci}))},getVars:function(e){return m.default.uniq(m.default.flatten(m.default.invoke(this.exprArgs(),"getVars",e))).sort()},getConsts:function(){return m.default.uniq(m.default.flatten(m.default.invoke(this.exprArgs(),"getConsts"))).sort()},getUnits:function(){return m.default.flatten(m.default.invoke(this.exprArgs(),"getUnits"))},is:function(e){return this instanceof e},has:function(e){return this instanceof e||m.default.any(this.exprArgs(),(function(t){return t.has(e)}))},raiseToThe:function(e){return new di(this,e)},isSubtract:function(){return!1},isDivide:function(){return!1},isRoot:function(){return!1},needsExplicitMul:function(){return this.args()[0].needsExplicitMul()},sameVars:function(e){var t=this.getVars(),n=e.getVars(),r=function(e,t){return!m.default.difference(e,t).length},s=function(e){return m.default.uniq(m.default.invoke(e,"toLowerCase")).sort()};return{equal:r(t,n),equalIgnoringCase:r(s(t),s(n))}},compare:function(e){if(e instanceof vi)return!1;var t=m.default.union(this.getVars(!0),e.getVars(!0)),n=function(e,t){var n=function(e,t){return Math.abs(e)<1||Math.abs(t)<1?Math.abs(e-t):Math.abs(1-e/t)}(e,t);return e===t||li(e)&&li(t)||n<Math.pow(10,-9)};if(!t.length&&!this.has(Ti)&&!e.has(Ti))return n(this.eval(),e.eval());var r=this.collect(),s=e.collect(),a=this.getUnits(),i=e.getUnits();if(!m.default.isEqual(a,i))return!1;for(var o=0;o<12;o++){var l,c={},p=Math.pow(10,1+Math.floor(3*o/12)),h=o%2==0;if(m.default.each(t,(function(e){var t,n;c[e]=h?(n=p-(t=-p),Math.random()*n+t):m.default.random(-p,p)})),r.has(bi)||s.has(bi)||r.has(Ti)||s.has(Ti)){var u=r.partialEval(c),d=s.partialEval(c);l=u.simplify().equals(d.simplify())}else l=n(u=r.eval(c),d=s.eval(c));if(!l)return!1}return!0},partialEval:function(e){return this instanceof Ti?this:this.has(bi)?this instanceof bi?new bi(this.symbol,this.arg.partialEval(e)):this.recurse("partialEval",e):new ki(this.eval(e).toFixed(9)).collect()},sameForm:function(e){return this.strip().equals(e.strip())},findGCD:function(e){return this.equals(e)?e:xi.One},getDenominator:function(){return xi.One},asMul:function(){return new ui(xi.One,this)},isPositive:ii,isNegative:function(){return!1},asPositiveFactor:function(){return this.isPositive()?this:xi.One},addHint:function(e){if(!e)return this;var t=this.construct(this.args());return t.hints=m.default.clone(this.hints),t.hints[e]=!0,t},hints:{parens:!1},asExpr:function(){return this},completeParse:function(){return this.recurse("completeParse")},abs:ii,negate:function(){return new ui(xi.Neg,this)}}),pi.prototype=new ci,m.default.extend(pi.prototype,{args:function(){return this.terms},normalize:function(){var e=m.default.sortBy(m.default.invoke(this.terms,"normalize"),(function(e){return e.print()}));return new this.func(e)},expand:function(){return this.recurse("expand").flatten()},partition:function(){var e=m.default.groupBy(this.terms,(function(e){return e instanceof xi})),t=e[!0]||[],n=e[!1]||[];return[new this.func(t),new this.func(n)]},flatten:function(){var e=this,t=m.default.reject(this.terms,(function(t){return t.equals(e.identity)}));if(0===t.length)return e.identity;if(1===t.length)return t[0];var n=m.default.groupBy(t,(function(t){return t instanceof e.func})),r=n[!0]||[],s=(n[!1]||[]).concat(m.default.flatten(m.default.pluck(r,"terms"),!0));return new e.func(s)},identity:void 0,reduce:ii,isPositive:function(){var e=m.default.invoke(this.terms,"collect");return m.default.all(m.default.invoke(e,"isPositive"))},replace:function(e,t){var n;n=e instanceof ci?m.default.indexOf(this.terms,e):e;var r=[];m.default.isArray(t)?r=t:t&&(r=[t]);var s=this.terms.slice(0,n).concat(r).concat(this.terms.slice(n+1));return new this.func(s)},remove:function(e){return this.replace(e)},getDenominator:function(){return new ui(m.default.invoke(this.terms,"getDenominator")).flatten()}}),hi.prototype=new pi,m.default.extend(hi.prototype,{func:hi,eval:function(e,t){return m.default.reduce(this.terms,(function(n,r){return n+r.eval(e,t)}),0)},codegen:function(){return m.default.map(this.terms,(function(e){return"("+e.codegen()+")"})).join(" + ")||"0"},print:function(){return m.default.invoke(this.terms,"print").join("+")},tex:function(){var e="";return m.default.each(this.terms,(function(t){!e||t.isSubtract()?e+=t.tex():e+="+"+t.tex()})),e},collect:function(e){var t=m.default.invoke(this.terms,"collect",e),n=[];m.default.each(t,(function(t){if(t instanceof ui){var r=t.partition();n.push([r[1].flatten(),r[0].reduce(e)])}else t instanceof xi?n.push([xi.One,t]):n.push([t,xi.One])}));var r=m.default.groupBy(n,(function(e){return e[0].normalize().print()})),s=m.default.compact(m.default.map(r,(function(t){var n=t[0][0];return new ui(new hi(m.default.zip.apply(m.default,t)[1]).reduce(e),n).collect(e)})));return new hi(s).flatten()},factor:function(e){e=m.default.extend({keepNegative:!1},e);var t,n=m.default.invoke(this.terms,"collect");t=n[0]instanceof ui?n[0].terms:[n[0]],m.default.each(m.default.rest(this.terms),(function(e){t=m.default.map(t,(function(t){return e.findGCD(t)}))})),!e.keepNegative&&this.isNegative()&&t.push(xi.Neg),t=new ui(t).flatten().collect();var r=m.default.map(n,(function(e){return ui.handleDivide(e,t).simplify()}));return r=new hi(r).flatten(),ui.createOrAppend(t,r).flatten()},reduce:function(e){return m.default.reduce(this.terms,(function(t,n){return t.add(n,e)}),this.identity)},needsExplicitMul:function(){return!1},isNegative:function(){var e=m.default.invoke(this.terms,"collect");return m.default.all(m.default.invoke(e,"isNegative"))},negate:function(){return new hi(m.default.invoke(this.terms,"negate"))}}),ui.prototype=new pi,m.default.extend(ui.prototype,{func:ui,eval:function(e,t){return m.default.reduce(this.terms,(function(n,r){return n*r.eval(e,t)}),1)},codegen:function(){return m.default.map(this.terms,(function(e){return"("+e.codegen()+")"})).join(" * ")||"0"},print:function(){return m.default.map(this.terms,(function(e){return e instanceof hi?"("+e.print()+")":e.print()})).join("*")},getUnits:function(){var e=m.default(this.terms).chain().map((function(e){return e.getUnits()})).flatten().value();return e.sort(((e,t)=>e.unit.localeCompare(t.unit))),e},tex:function(){for(var e,t=" \\cdot ",n=m.default.groupBy(this.terms,(function(e){return e.isDivide()?"inverse":e instanceof xi?"number":"other"})),r=n.inverse||[],s=n.number||[],a=n.other||[],i="",o=0;o<s.length;o++)if(s[o]instanceof Ci&&!(s[o]instanceof Si)&&a.length>0&&r.length>0){var l=s.slice();l.splice(o,1);var c=l.concat(r).concat(a);return s[o].tex()+new ui(c).tex()}if(0===(s=m.default.compact(m.default.map(s,(function(e){var t=e instanceof Ci&&!(e instanceof Si),n=!e.hints.fraction||r.length>0;if(t&&n){r.push(new di(new Si(e.d),xi.Div));var s=new Si(e.n);return s.hints=e.hints,m.default.any(e.hints)?s:null}return e})))).length&&1===a.length)e=a[0].tex();else{var p="";m.default.each(s,(function(e){e.hints.subtract&&e.hints.entered?(i+="-",p+=(p?t:"")+e.abs().tex()):e instanceof Si&&-1===e.n&&(e.hints.negate||e.hints.subtract)?i+="-":p+=(p?t:"")+e.tex()})),m.default.each(a,(function(e){e.needsExplicitMul()?p+=(p?t:"")+e.tex():p+=e instanceof hi?"("+e.tex()+")":e.tex()})),e=p||"1"}if(r.length){var h=new ui(m.default.invoke(r,"asDivide")).flatten().tex();return i+"\\frac{"+e+"}{"+h+"}"}return i+e},strip:function(){return new ui(m.default.map(this.terms,(function(e){return e instanceof xi?e.abs():e.strip()}))).flatten()},expand:function(){var e=function(e){return e instanceof hi},t=function(e){return e instanceof di&&e.exp.isNegative()},n=this.recurse("expand").flatten(),r=m.default.any(n.terms,e),s=m.default.any(n.terms,(function(n){return t(n)&&e(n.base)}));if(!r&&!s)return n;var a=m.default.groupBy(n.terms,t),i=a[!1]||[],o=a[!0]||[];if(r){var l=m.default.groupBy(i,e),c=l[!0]||[],p=l[!1]||[],h=m.default.reduce(c,(function(e,t){return m.default.reduce(e,(function(e,n){return e.concat(m.default.map(t.terms,(function(e){return n.concat(e)})))}),[])}),[[]]);i=[new hi(m.default.map(h,(function(e){return new ui(p.concat(e)).flatten()})))]}return s&&(o=[new di(new ui(m.default.invoke(o,"getDenominator")).flatten().expand(),xi.Div)]),new ui(i.concat(o)).flatten()},factor:function(e){var t=this.recurse("factor",e).flatten();if(!(t instanceof ui))return t;var n=m.default.groupBy(t.terms,(function(e){return e instanceof Ci})),r=m.default.reduce(n[!0],(function(e,t){return{n:e.n*t.n,d:e.d*t.d}}),{n:1,d:1});return r=1===r.d?new Si(r.n):new Ci(r.n,r.d),new ui((n[!1]||[]).concat(r)).flatten()},collect:function(e){var t=this.recurse("collect",e).partition(),n=t[0].reduce(e);if(0===n.eval())return xi.Zero;var r=t[1].flatten();if(!(r instanceof ui))return new ui(n,r).flatten();r=r.terms;var s=[];m.default.each(r,(function(e){e instanceof di?s.push([e.base,e.exp]):s.push([e,xi.One])}));var a=m.default.groupBy(s,(function(e){return e[0].normalize().print()})),i=m.default.compact(m.default.map(a,(function(t){var n=t[0][0],r=new hi(m.default.zip.apply(m.default,t)[1]).collect(e);return r instanceof xi&&0===r.eval()?null:[n,r]}))),o=(s=m.default.groupBy(i,(function(e){return e[0]instanceof fi&&e[0].isBasic()?"trig":e[0]instanceof mi?"log":"expr"}))).trig||[],l=s.log||[],c=s.expr||[];if(o.length>1){var p=m.default.groupBy(o,(function(e){return e[0].arg.normalize().print()}));o=[],m.default.each(p,(function(t){var n=t[0][0].arg,r={sin:xi.Zero,cos:xi.Zero};m.default.each(t,(function(e){r[e[0].type]=e[1]})),ui.handleNegative(r.sin).collect(e).equals(r.cos)&&(r=r.cos.isNegative()?{tan:r.sin}:{cot:r.cos}),m.default.each(r,(function(e,t){o.push([new fi(t,n),e])}))}))}if(l.length>1){var h=m.default.groupBy(l,(function(e){return e[0].base.normalize().print()}));l=[],m.default.each(h,(function(t){2===t.length&&ui.handleNegative(t[0][1]).collect(e).equals(t[1][1])?t[0][1].isNegative()?l.push([new mi(t[0][0].power,t[1][0].power),t[1][1]]):l.push([new mi(t[1][0].power,t[0][0].power),t[0][1]]):l=l.concat(t)}))}s=o.concat(l).concat(c);var u=m.default.map(s,(function(t){return new di(t[0],t[1]).collect(e)}));return new ui([n].concat(u)).flatten()},isSubtract:function(){return m.default.any(this.terms,(function(e){return e instanceof xi&&e.hints.subtract}))},factorIn:function(e){var t=this.partition()[0].terms,n=t.length&&m.default.all(t,(function(e){return e.n>0}));if(n){var r=t[0].negate();return r.hints=t[0].hints,this.replace(t[0],r.addHint(e))}return new ui([xi.negativeOne(e)].concat(this.terms))},factorOut:function(){var e=!1,t=m.default.compact(m.default.map(this.terms,(function(t,n,r){return!e&&t instanceof xi&&t.hints.divide?(e=!0,-1!==t.n?t.negate():null):t})));return 1===t.length?t[0]:new ui(t)},reduce:function(e){return m.default.reduce(this.terms,(function(t,n){return t.mul(n,e)}),this.identity)},findGCD:function(e){return new ui(m.default.invoke(this.terms,"findGCD",e)).flatten()},asMul:function(){return this},asPositiveFactor:function(){return this.isPositive()?this:new ui(m.default.invoke(this.collect().terms,"asPositiveFactor")).flatten()},isNegative:function(){return m.default.any(m.default.invoke(this.collect().terms,"isNegative"))},fold:function(){return ui.fold(this)},negate:function(){var e=function(e){return e instanceof xi};if(m.default.any(this.terms,e)){var t=m.default.find(this.terms,e);return this.replace(t,t.negate())}return new ui([xi.Neg].concat(this.terms))}}),m.default.each([hi,ui],(function(e){m.default.extend(e,{createOrAppend:function(t,n){return t instanceof e?new e(t.terms.concat(n)):new e(t,n)}})})),m.default.extend(ui,{handleNegative:function(e,t){if(e instanceof xi&&e.n>0){var n=e.negate();return n.hints=e.hints,n.addHint(t)}return e instanceof ui?e.factorIn(t):new ui(xi.negativeOne(t),e)},handleDivide:function(e,t){if(t instanceof ui){var n=ui.handleDivide(e,t.terms[0]),r=new ui(m.default.rest(t.terms)).flatten();return ui.handleDivide(n,r)}var s=function(e){return e instanceof Si};if(s(t)&&e instanceof ui&&m.default.any(e.terms,s)){var a=e.terms.slice().reverse(),i=m.default.find(a,(function(e){return e instanceof Ci}));if(!s(i))return new ui(e.terms.concat([new Ci(1,t.n).addHint("fraction")]));var o=new Ci(i.n,t.n);return o.hints=i.hints,i===a[0]&&(o=o.addHint("fraction")),i.n<0&&t.n<0?(o.d=-o.d,e.replace(i,[xi.Neg,o])):e.replace(i,o)}var l=function(e,t){if(t instanceof Si){if(e instanceof Si)return e.n<0&&t.n<0?[xi.Neg,new Ci(e.n,-t.n).addHint("fraction")]:[new Ci(e.n,t.n).addHint("fraction")];var n=new Ci(1,t.eval());return t.eval()<0?[e,n.addHint("negate")]:[e,n]}var r;if(t instanceof fi&&t.exp){var s=t.exp;t.exp=void 0,t=new di(t,s)}return r=t instanceof di?new di(t.base,ui.handleNegative(t.exp,"divide")):new di(t,xi.Div),e instanceof Si&&1===e.n?[r]:[e,r]};if(e instanceof ui){var c=l(m.default.last(e.terms),t);return new ui(m.default.initial(e.terms).concat(c))}return new ui(c=l(e,t)).flatten()},fold:function(e){if(e instanceof ui){var t=m.default.find(m.default.initial(e.terms),(function(e){return(e instanceof fi||e instanceof mi)&&e.hints.open})),n=m.default.indexOf(e.terms,t);if(t){var r,s=m.default.last(e.terms);if(!(t.hints.parens||s.hints.parens||s.has(fi)||s.has(mi)))return r=t instanceof fi?fi.create([t.type,t.exp],ui.createOrAppend(t.arg,s).fold()):mi.create(t.base,ui.createOrAppend(t.power,s).fold()),0===n?r:new ui(e.terms.slice(0,n).concat(r)).fold();t.hints.open=!1}var a=e.partition()[0].terms,i=function(e){return e.n>0},o=function(e){return-1===e.n&&e.hints.negate};if(a.length>1&&m.default.some(a,o)&&m.default.some(a,i)&&m.default.every(a,(function(e){return i(e)||o(e)}))){var l=m.default.indexOf(e.terms,m.default.find(e.terms,o)),c=m.default.indexOf(e.terms,m.default.find(e.terms,i));if(l<c)return e.replace(c,e.terms[c].negate()).remove(l)}}return e}}),di.prototype=new ci,m.default.extend(di.prototype,{func:di,args:function(){return[this.base,this.exp]},eval:function(e,t){var n=this.base.eval(e,t),r=this.exp.eval(e,t);if(n<0){var s=this.exp.simplify();if(s instanceof ki){var a=s.n,i=(a-a.toFixed()).toString().length-2,o=Math.pow(10,i);s=new Ci(a*o,o).simplify()}if(s instanceof Ci&&Math.abs(s.d)%2==1)return(Math.abs(s.n)%2==1?-1:1)*Math.pow(-1*n,r)}return Math.pow(n,r)},getUnits:function(){return this.base.getUnits().map(function(e){return{unit:e.unit,pow:e.pow*this.exp.n}}.bind(this))},codegen:function(){return"Math.pow("+this.base.codegen()+", "+this.exp.codegen()+")"},print:function(){var e=this.base.print();return(this.base instanceof pi||this.base instanceof di)&&(e="("+e+")"),e+"^("+this.exp.print()+")"},tex:function(){if(this.isDivide())return"\\frac{1}{"+this.asDivide().tex()+"}";if(this.isRoot())return 1!==this.exp.n&&oi("Node marked with hint 'root' does not have exponent of form 1/x."),2===this.exp.d?"\\sqrt{"+this.base.tex()+"}":"\\sqrt["+this.exp.d+"]{"+this.base.tex()+"}";if(this.base instanceof fi&&!this.base.isInverse()&&this.exp instanceof xi&&this.exp.isSimple()&&this.exp.eval()>=0){var e=this.base.tex({split:!0});return e[0]+"^{"+this.exp.tex()+"}"+e[1]}var t=this.base.tex();return this.base instanceof pi||this.base instanceof di||this.base instanceof xi&&!this.base.isSimple()?t="("+t+")":(this.base instanceof fi||this.base instanceof mi)&&(t="["+t+"]"),t+"^{"+this.exp.tex()+"}"},needsExplicitMul:function(){return!this.isRoot()&&this.base.needsExplicitMul()},expand:function(){var e=this.recurse("expand");if(e.base instanceof ui)return new ui(m.default.map(e.base.terms,(function(t){return new di(t,e.exp)}))).expand();if(e.base instanceof hi&&e.exp instanceof Si&&e.exp.abs().eval()>1){for(var t=e.exp.eval()>0,n=e.exp.abs().eval(),r=function(e){return t?e:new di(e,xi.Div)},s={1:e.base},a=2;a<=n;a*=2){var i=new ui(s[a/2],s[a/2]);s[a]=i.expand().collect()}if(m.default.has(s,n))return r(s[n]);var o=m.default.map(n.toString(2).split(""),(function(e,t,n){return Number(e)*Math.pow(2,n.length-t-1)}));return o=m.default.without(o,0),r(i=new ui(m.default.pick(s,o)).expand().collect())}return e.exp instanceof hi?new ui(m.default.map(e.exp.terms,(function(t){return new di(e.base,t).expand()}))).expand():e},factor:function(){var e=this.recurse("factor");return e.base instanceof ui?new ui(m.default.map(e.base.terms,(function(t){return t instanceof Si&&e.exp.equals(xi.Div)?new Ci(1,t.n):new di(t,e.exp)}))):e},collect:function(e){if(this.base instanceof di)return new di(this.base.base,s=ui.createOrAppend(this.base.exp,this.exp)).collect(e);var t=this.recurse("collect",e),n=function(e){return e instanceof mi&&e.base.equals(t.base)};if(t.exp instanceof xi&&0===t.exp.eval())return xi.One;if(t.exp instanceof xi&&1===t.exp.eval())return t.base;if(n(t.exp))return t.exp.power;if(t.exp instanceof ui&&m.default.any(t.exp.terms,n)){var r=m.default.find(t.exp.terms,n);return new di(r.power,s=t.exp.remove(r).flatten()).collect(e)}if(t.base instanceof xi&&t.exp instanceof xi){if(e&&e.preciseFloats){var s=t.exp.asRational(),a=t.base.getDecimalPlaces();if(new di(t.base,new Ci(1,s.d)).collect().getDecimalPlaces()>a){var i=new di(t.base,new Si(s.n)).collect();return new di(i,new Ci(1,s.d))}}return t.base.raiseToThe(t.exp,e)}return t},isDivide:function(){var e=function(e){return e instanceof xi&&e.hints.divide};return e(this.exp)||this.exp instanceof ui&&m.default.any(this.exp.terms,e)},asDivide:function(){if(this.exp instanceof xi){if(-1===this.exp.eval())return this.base;var e=this.exp.negate();return e.hints=m.default.clone(this.exp.hints),e.hints.divide=!1,new di(this.base,e)}if(this.exp instanceof ui)return new di(this.base,this.exp.factorOut());oi("called asDivide() on an Expr that wasn't a Num or Mul")},isRoot:function(){return this.exp instanceof Ci&&this.exp.hints.root},isSquaredTrig:function(){return this.base instanceof fi&&!this.base.isInverse()&&this.exp instanceof xi&&2===this.exp.eval()},getDenominator:function(){if(this.exp instanceof xi&&-1===this.exp.eval())return ui.createOrAppend(this.base,this.base.getDenominator()).flatten();if(this.exp.isNegative()){var e=new di(this.base,ui.handleNegative(this.exp).collect());return ui.createOrAppend(e,e.collect().getDenominator()).flatten()}return this.base instanceof xi?new di(this.base.getDenominator(),this.exp).collect():xi.One},findGCD:function(e){var t,n;if(e instanceof di?(t=e.base,n=e.exp):(t=e,n=xi.One),this.base.equals(t)){if(this.exp.equals(n))return this;if(this.exp instanceof xi&&n instanceof xi)return new di(this.base,xi.min(this.exp,n)).collect();if(this.exp instanceof xi||n instanceof xi)return xi.One;var r=this.exp.asMul().partition(),s=n.asMul().partition();if(r[1].equals(s[1]))return new di(t,new ui(xi.min(r[0].reduce(),s[0].reduce()),r[1].flatten()).flatten()).collect()}return xi.One},isPositive:function(){if(this.base.isPositive())return!0;var e=this.exp.simplify();return e instanceof Si&&e.eval()%2==0},asPositiveFactor:function(){if(this.isPositive())return this;var e=this.exp.simplify();if(e instanceof Si){var t=e.eval();if(t>2)return new di(this.base,new Si(t-1));if(t<-2)return new di(this.base,new Si(t+1))}return xi.One}}),m.default.extend(di,{sqrt:function(e){return new di(e,xi.Sqrt)},nthroot:function(e,t){return new di(e,ui.fold(ui.handleDivide(new Si(1),t)).addHint("root"))}}),mi.prototype=new ci,m.default.extend(mi.prototype,{func:mi,args:function(){return[this.base,this.power]},eval:function(e,t){return Math.log(this.power.eval(e,t))/Math.log(this.base.eval(e,t))},codegen:function(){return"(Math.log("+this.power.codegen()+") / Math.log("+this.base.codegen()+"))"},print:function(){var e="("+this.power.print()+")";return this.isNatural()?"ln"+e:"log_("+this.base.print()+") "+e},tex:function(){var e="("+this.power.tex()+")";return this.isNatural()?"\\ln"+e:"\\log_{"+this.base.tex()+"}"+e},collect:function(e){var t=this.recurse("collect",e);return t.power instanceof xi&&1===t.power.eval()?xi.Zero:t.base.equals(t.power)?xi.One:t.power instanceof di&&t.power.base.equals(t.base)?t.power.exp:t},expand:function(){var e=this.recurse("expand");return e.power instanceof ui?new hi(m.default.map(e.power.terms,(function(t){return new mi(e.base,t).expand()}))):e.power instanceof di?new ui(e.power.exp,new mi(e.base,e.power.base).expand()).flatten():e.isNatural()?e:ui.handleDivide(new mi(wi.e,e.power),new mi(wi.e,e.base))},hints:m.default.extend(mi.prototype.hints,{open:!1}),isPositive:function(){var e=this.collect();return e.base instanceof xi&&e.power instanceof xi&&this.eval()>0},needsExplicitMul:function(){return!1},isNatural:function(){return this.base.equals(wi.e)}}),m.default.extend(mi,{natural:function(){return wi.e},common:function(){return xi.Ten},create:function(e,t){var n=new mi(e,t);return t.hints.parens||(n=n.addHint("open")),n}}),fi.prototype=new ci,m.default.extend(fi.prototype,{func:fi,args:function(){return[this.type,this.arg]},functions:{sin:{eval:Math.sin,codegen:"Math.sin((",tex:"\\sin",expand:function(){return this}},cos:{eval:Math.cos,codegen:"Math.cos((",tex:"\\cos",expand:function(){return this}},tan:{eval:Math.tan,codegen:"Math.tan((",tex:"\\tan",expand:function(){return ui.handleDivide(fi.sin(this.arg),fi.cos(this.arg))}},csc:{eval:function(e){return 1/Math.sin(e)},codegen:"(1/Math.sin(",tex:"\\csc",expand:function(){return ui.handleDivide(xi.One,fi.sin(this.arg))}},sec:{eval:function(e){return 1/Math.cos(e)},codegen:"(1/Math.cos(",tex:"\\sec",expand:function(){return ui.handleDivide(xi.One,fi.cos(this.arg))}},cot:{eval:function(e){return 1/Math.tan(e)},codegen:"(1/Math.tan(",tex:"\\cot",expand:function(){return ui.handleDivide(fi.cos(this.arg),fi.sin(this.arg))}},arcsin:{eval:Math.asin,codegen:"Math.asin((",tex:"\\arcsin"},arccos:{eval:Math.acos,codegen:"Math.acos((",tex:"\\arccos"},arctan:{eval:Math.atan,codegen:"Math.atan((",tex:"\\arctan"},arccsc:{eval:function(e){return Math.asin(1/e)},codegen:"Math.asin(1/(",tex:"\\operatorname{arccsc}"},arcsec:{eval:function(e){return Math.acos(1/e)},codegen:"Math.acos(1/(",tex:"\\operatorname{arcsec}"},arccot:{eval:function(e){return Math.atan(1/e)},codegen:"Math.atan(1/(",tex:"\\operatorname{arccot}"},sinh:{eval:function(e){return(Math.exp(e)-Math.exp(-e))/2},codegen:function(e){return"((Math.exp("+e+") - Math.exp(-("+e+"))) / 2)"},tex:"\\sinh",expand:function(){return this}},cosh:{eval:function(e){return(Math.exp(e)+Math.exp(-e))/2},codegen:function(e){return"((Math.exp("+e+") + Math.exp(-("+e+"))) / 2)"},tex:"\\cosh",expand:function(){return this}},tanh:{eval:function(e){return(Math.exp(e)-Math.exp(-e))/(Math.exp(e)+Math.exp(-e))},codegen:function(e){return"((Math.exp("+e+") - Math.exp(-("+e+"))) / (Math.exp("+e+") + Math.exp(-("+e+"))))"},tex:"\\tanh",expand:function(){return ui.handleDivide(fi.sinh(this.arg),fi.cosh(this.arg))}},csch:{eval:function(e){return 2/(Math.exp(e)-Math.exp(-e))},codegen:function(e){return"(2 / (Math.exp("+e+") - Math.exp(-("+e+"))))"},tex:"\\csch",expand:function(){return ui.handleDivide(xi.One,fi.sinh(this.arg))}},sech:{eval:function(e){return 2/(Math.exp(e)+Math.exp(-e))},codegen:function(e){return"(2 / (Math.exp("+e+") + Math.exp(-("+e+"))))"},tex:"\\sech",expand:function(){return ui.handleDivide(xi.One,fi.cosh(this.arg))}},coth:{eval:function(e){return(Math.exp(e)+Math.exp(-e))/(Math.exp(e)-Math.exp(-e))},codegen:function(e){return"((Math.exp("+e+") + Math.exp(-("+e+"))) / (Math.exp("+e+") - Math.exp(-("+e+"))))"},tex:"\\coth",expand:function(){return ui.handleDivide(fi.cosh(this.arg),fi.sinh(this.arg))}}},isEven:function(){return m.default.contains(["cos","sec"],this.type)},isInverse:function(){return 0===this.type.indexOf("arc")},isBasic:function(){return m.default.contains(["sin","cos"],this.type)},eval:function(e,t){return(0,this.functions[this.type].eval)(this.arg.eval(e,t))},codegen:function(){var e=this.functions[this.type].codegen;if("function"==typeof e)return e(this.arg.codegen());if("string"==typeof e)return e+this.arg.codegen()+"))";throw new Error("codegen not implemented for "+this.type)},print:function(){return this.type+"("+this.arg.print()+")"},tex:function(e){var t=this.functions[this.type].tex,n="("+this.arg.tex()+")";return e&&e.split?[t,n]:t+n},hints:m.default.extend(fi.prototype.hints,{open:!1}),isPositive:function(){return this.collect().arg instanceof xi&&this.eval()>0},completeParse:function(){if(this.exp){var e=new di(this,this.exp);return this.exp=void 0,e}return this},needsExplicitMul:function(){return!1},expand:function(){var e=this.recurse("expand");if(e.isInverse())return e;var t=e.functions[e.type].expand;return m.default.bind(t,e)()},collect:function(e){var t,n=this.recurse("collect",e);return!n.isInverse()&&n.arg.isNegative()?(t=n.arg instanceof xi?n.arg.abs():ui.handleDivide(n.arg,xi.Neg).collect(e),n.isEven()?new fi(n.type,t):new ui(xi.Neg,new fi(n.type,t))):n}}),m.default.extend(fi,{create:function(e,t){var n=e[0],r=e[1];r&&r.equals(xi.Neg)&&(n="arc"+n,r=void 0);var s=new fi(n,t);return t.hints.parens||(s=s.addHint("open")),r&&(s.exp=r),s},sin:function(e){return new fi("sin",e)},cos:function(e){return new fi("cos",e)},sinh:function(e){return new fi("sinh",e)},cosh:function(e){return new fi("cosh",e)}}),gi.prototype=new ci,m.default.extend(gi.prototype,{func:gi,args:function(){return[this.arg]},eval:function(e,t){return Math.abs(this.arg.eval(e,t))},codegen:function(){return"Math.abs("+this.arg.codegen()+")"},print:function(){return"abs("+this.arg.print()+")"},tex:function(){return"\\left|"+this.arg.tex()+"\\right|"},collect:function(e){var t=this.recurse("collect",e);if(t.arg.isPositive())return t.arg;if(t.arg instanceof xi)return t.arg.abs();if(t.arg instanceof ui){var n=m.default.groupBy(t.arg.terms,(function(e){return e.isPositive()?"positive":e instanceof xi?"number":"other"})),r=n.positive.concat(m.default.invoke(n.number,"abs"));return n.other.length&&r.push(new gi(new ui(n.other).flatten())),new ui(r).flatten()}return t},expand:function(){var e=this.recurse("expand");return e.arg instanceof ui?new ui(m.default.map(e.arg.terms,(function(e){return new gi(e)}))):e},isPositive:function(){return!0}}),vi.prototype=new ci,m.default.extend(vi.prototype,{func:vi,args:function(){return[this.left,this.type,this.right]},needsExplicitMul:function(){return!1},print:function(){return this.left.print()+this.type+this.right.print()},signs:{"=":" = ","<":" < ",">":" > ","<>":" \\ne ","<=":" \\le ",">=":" \\ge "},tex:function(){return this.left.tex()+this.signs[this.type]+this.right.tex()},normalize:function(){var e=this.recurse("normalize");return m.default.contains([">",">="],e.type)?new vi(e.right,e.type.replace(">","<"),e.left):e},asExpr:function(e){var t=function(e){return e instanceof xi&&e.isSimple()&&0===e.eval()},n=[];this.left instanceof hi?n=m.default.clone(this.left.terms):t(this.left)||(n=[this.left]),this.right instanceof hi?n=n.concat(this.right.negate().terms):t(this.right)||n.push(this.right.negate());var r=!this.isEquality();n=m.default.invoke(n,"collect",{preciseFloats:!0});for(var s=0;s<n.length;s++){var a=n[s].getDenominator();r&&!a.isPositive()&&(a=a.asPositiveFactor()),a.equals(xi.One)||(n=m.default.map(n,(function(e){return ui.createOrAppend(e,a).simplify({once:!0,preciseFloats:!0})})))}var i=new hi(n).flatten();return e?i:this.divideThrough(i)},divideThrough:function(e){var t=!this.isEquality(),n=e.simplify({once:!0}),r=n.factor({keepNegative:t});if(!(r instanceof ui))return e;var s=r.terms,a=m.default.groupBy(s,(function(e){return e instanceof hi})),i=a[!0]||[],o=a[!1]||[];if(i.length&&this.isEquality())return new ui(i).flatten();var l=o;i.length||(l=m.default.reject(l,(function(e){return!!e.getVars().length}))),t&&(l=m.default.invoke(l,"asPositiveFactor")),l=m.default.reject(l,(function(e){return e.equals(xi.One)})),l=m.default.map(l,(function(e){return new di(e,xi.Div)}));var c=new ui(s.concat(l)).collect();return c.equals(r)?n:c},isEquality:function(){return m.default.contains(["=","<>"],this.type)},compare:function(e){if(!(e instanceof vi))return!1;var t=this.normalize(),n=e.normalize();if(t.type!==n.type)return!1;var r=t.divideThrough(t.asExpr(!0).collect()),s=n.divideThrough(n.asExpr(!0).collect());return t.isEquality()?r.compare(s)||r.compare(ui.handleNegative(s)):r.compare(s)},sameForm:function(e){var t=this.normalize(),n=e.normalize(),r=t.left.sameForm(n.left)&&t.right.sameForm(n.right);return t.isEquality()?r||t.left.sameForm(n.right)&&t.right.sameForm(n.left):r},isSimplified:function(){var e=this.asExpr(!0),t=this.divideThrough(e).simplify();return e.equals(t)&&this.left.isSimplified()&&this.right.isSimplified()}}),m.default.extend(vi.prototype,{solveLinearEquationForVariable:function(e){var t,n,r,s=this.asExpr();if(!s.is(hi)||2!==s.terms.length)throw new Error("Can only handle linear equations of the form a + bx (= 0)");return(r=s.terms[0]).has(Ei)&&m.default.contains(r.getVars(),e.symbol)?(t=ui.handleNegative(s.terms[1]),n=ui.handleDivide(s.terms[0],e)):(t=ui.handleNegative(s.terms[0]),n=ui.handleDivide(s.terms[1],e)),ui.handleDivide(t,n).simplify()}}),yi.prototype=new ci,m.default.extend(yi.prototype,{needsExplicitMul:function(){return!1},findGCD:function(e){return e instanceof yi||e instanceof xi?this.equals(e)?this:xi.One:e.findGCD(this)}}),bi.prototype=new yi,m.default.extend(bi.prototype,{func:bi,args:function(){return[this.symbol,this.arg]},print:function(){return this.symbol+"("+this.arg.print()+")"},tex:function(){return this.symbol+"("+this.arg.tex()+")"},eval:function(e,t){var n=this.arg,r=e[this.symbol],s=m.default.extend(m.default.clone(e),{x:n.eval(e,t)}),a=Ni(r,t);return a.parsed?a.expr.eval(s,t):a},codegen:function(){return'vars["'+this.symbol+'"]('+this.arg.codegen()+")"},getUnits:function(){return this.arg.getUnits()},getVars:function(e){return e?this.arg.getVars():m.default.union(this.arg.getVars(),[this.symbol]).sort()},getConsts:function(){return this.arg.getConsts()}}),Ei.prototype=new yi,m.default.extend(Ei.prototype,{func:Ei,args:function(){return[this.symbol,this.subscript]},exprArgs:function(){return[]},recurse:function(){return this},print:function(){var e="";return this.subscript&&(e="_("+this.subscript.print()+")"),this.symbol+e},prettyPrint:function(){var e=this.subscript;return e&&(e instanceof xi||e instanceof yi)?this.symbol+"_"+e.print():this.print()},tex:function(){var e="";return this.subscript&&(e="_{"+this.subscript.tex()+"}"),(this.symbol.length>1?"\\":"")+this.symbol+e},repr:function(){return"Var("+this.print()+")"},eval:function(e,t){return e[this.prettyPrint()]},codegen:function(){return'vars["'+this.prettyPrint()+'"]'},getVars:function(){return[this.prettyPrint()]},isPositive:function(){return!1}}),wi.prototype=new yi,m.default.extend(wi.prototype,{func:wi,args:function(){return[this.symbol]},recurse:function(){return this},eval:function(e,t){return"pi"===this.symbol?Math.PI:"e"===this.symbol?Math.E:void 0},codegen:function(){return"pi"===this.symbol?"Math.PI":"e"===this.symbol?"Math.E":void 0},print:function(){return this.symbol},tex:function(){return"pi"===this.symbol?"\\pi ":"e"===this.symbol?"e":void 0},isPositive:function(){return this.eval()>0},abs:function(){return this.eval()>0?this:ui.handleNegative(this)},getConsts:function(){return[this.print()]}}),wi.e=new wi("e"),wi.pi=new wi("pi"),xi.prototype=new ci,m.default.extend(xi.prototype,{repr:function(){return this.print()},strip:function(){return this.abs()},recurse:function(){return this},codegen:function(){return this.print()},add:ii,mul:ii,negate:ii,isSubtract:function(){return this.hints.subtract},abs:ii,needsExplicitMul:function(){return!0},findGCD:ii,isPositive:function(){return this.eval()>0},isNegative:function(){return this.eval()<0},asPositiveFactor:function(){return this.isPositive()?this:this.abs()},hints:m.default.extend(xi.prototype.hints,{negate:!1,subtract:!1,divide:!1,root:!1,fraction:!1,entered:!1}),isSimple:ii,getDecimalPlaces:function(){var e=(""+this.n).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);return e?Math.max(0,(e[1]?e[1].length:0)-(e[2]?+e[2]:0)):0},asRational:ii}),Ci.prototype=new xi,m.default.extend(Ci.prototype,{func:Ci,args:function(){return[this.n,this.d]},eval:function(){return this.n/this.d},print:function(){return this.n.toString()+"/"+this.d.toString()},tex:function(){var e="\\frac{"+Math.abs(this.n).toString()+"}{"+this.d.toString()+"}";return this.n<0?"-"+e:e},add:function(e,t){return e instanceof Ci?new Ci(this.n*e.d+this.d*e.n,this.d*e.d).collect():e.add(this,t)},mul:function(e,t){return e instanceof Ci?new Ci(this.n*e.n,this.d*e.d).collect():e.mul(this,t)},collect:function(){var e=xi.findGCD(this.n,this.d),t=this.n/e,n=this.d/e;return 1===n?new Si(t):new Ci(t,n)},negate:function(){return new Ci(-this.n,this.d)},abs:function(){return new Ci(Math.abs(this.n),this.d)},findGCD:function(e){return e instanceof Ci?new Ci(xi.findGCD(this.n*e.d,e.n*this.d),this.d*e.d).collect():e instanceof Si?new Ci(xi.findGCD(this.n,e.n),this.d):e.findGCD(this)},raiseToThe:function(e){if(e instanceof Si){var t=e.eval()>0,n=e.abs().eval(),r=Math.pow(this.n,n),s=Math.pow(this.d,n);return t?new Ci(r,s).collect():new Ci(s,r).collect()}return new ki(this.eval()).raiseToThe(e)},getDenominator:function(){return new Si(this.d)},isSimple:function(){return!1},asRational:function(){return this}}),Si.prototype=new Ci(0,1),m.default.extend(Si.prototype,{func:Si,args:function(){return[this.n]},print:function(){return this.n.toString()},tex:function(){return this.n.toString()},negate:function(){return new Si(-this.n)},abs:function(){return new Si(Math.abs(this.n))},isSimple:function(){return!0},findGCD:function(e){return e instanceof Si?new Si(xi.findGCD(this.n,e.n)):e.findGCD(this)}}),m.default.extend(Si,{create:function(e){return new Si(e).addHint("entered")}}),ki.prototype=new xi,m.default.extend(ki.prototype,{func:ki,args:function(){return[this.n]},eval:function(){return this.n},print:function(){return this.n.toString()},tex:function(){return this.n.toString()},add:function(e,t){return t&&t.preciseFloats?ki.toDecimalPlaces(this.n+e.eval(),Math.max(this.getDecimalPlaces(),e.getDecimalPlaces())):new ki(this.n+e.eval()).collect()},mul:function(e,t){return t&&t.preciseFloats?ki.toDecimalPlaces(this.n*e.eval(),this.getDecimalPlaces()+e.getDecimalPlaces()):new ki(this.n*e.eval()).collect()},collect:function(){return this},negate:function(){return new ki(-this.n)},abs:function(){return new ki(Math.abs(this.n))},findGCD:function(e){return e instanceof xi?new ki(xi.findGCD(this.eval(),e.eval())).collect():e.findGCD(this)},raiseToThe:function(e,t){return t&&t.preciseFloats&&e instanceof Si&&e.n>1?ki.toDecimalPlaces(new di(this,e).eval(),this.getDecimalPlaces()*e.n):new ki(new di(this,e).eval()).collect()},asRational:function(){var e=this.n.toString().split(".");return 1===e.length?new Ci(this.n,1):new Ci(Number(e.join("")),Math.pow(10,e[1].length)).collect()},getDenominator:function(){return this.asRational().getDenominator()},isSimple:function(){return!0}}),m.default.extend(ki,{create:function(e){return new ki(e).addHint("entered")},toDecimalPlaces:function(e,t){return new ki(+e.toFixed(Math.min(t,20))).collect()}}),m.default.extend(xi,{negativeOne:function(e){return"subtract"===e?xi.Sub:"divide"===e?xi.Div:xi.Neg},findGCD:function(e,t){var n;if(e=Math.abs(e),t=Math.abs(t),e!==Math.floor(e)||t!==Math.floor(t))return 1;for(;t;)n=e%t,e=t,t=n;return e},min:function(){return m.default.min(m.default.toArray(arguments),(function(e){return e.eval()}))},max:function(){return m.default.max(m.default.toArray(arguments),(function(e){return e.eval()}))}}),xi.Neg=new Si(-1).addHint("negate"),xi.Sub=new Si(-1).addHint("subtract"),xi.Div=new Si(-1).addHint("divide"),xi.Sqrt=new Ci(1,2).addHint("root"),xi.Zero=new Si(0),xi.One=new Si(1),xi.Ten=new Si(10),hi.prototype.identity=xi.Zero,ui.prototype.identity=xi.One,ai.yy={Add:hi,Mul:ui,Pow:di,Log:mi,Trig:fi,Eq:vi,Abs:gi,Func:bi,Const:wi,Var:Ei,Int:Si,Float:ki,parseError:function(e,t){throw new Error(t.loc.first_column)},constants:["e"],symbolLexer:function(e){return m.default.contains(ai.yy.constants,e)?"CONST":m.default.contains(ai.yy.functions,e)?"FUNC":"VAR"}};var Ni=function(e,t){try{return t&&t.functions?ai.yy.functions=m.default.without(t.functions,"i"):ai.yy.functions=[],t&&t.decimal_separator&&(e=e.split(t.decimal_separator).join(".")),{parsed:!0,expr:ai.parse(e).completeParse()}}catch(e){return{parsed:!1,error:e.message}}};function Ti(e){this.symbol=e}Ti.prototype=new yi;var _i=function(e){if(m.default(Mi).has(e)||m.default(Ri).has(e))return new Ti(e);var t=m.default(m.default(Ai).keys()).find((function(t){return new RegExp("^"+t).test(e)}));if(t){var n=e.replace(new RegExp("^"+t),"");if(m.default(Mi).has(n)||Ri[n]&&Ri[n].prefixes===Pi)return new ui(Ai[t],new Ti(n));throw new Error(n+" does not allow prefixes")}return new Ti(e)},Oi=function(e){try{var t=si.parse(e),n=[];m.default(t.unit.num).each((function(e){n.push(new di(_i(e.name),new Si(e.pow)))})),m.default(t.unit.denom).each((function(e){n.push(new di(_i(e.name),new Si(-1*e.pow)))}));var r=new ui(n).flatten();return"unitMagnitude"===t.type?{parsed:!0,unit:r,expr:new ui([new ki(+t.magnitude)].concat(n)),coefficient:t.magnitude,type:t.type}:{parsed:!0,unit:r,type:t.type}}catch(e){return{parsed:!1,error:e.message}}};m.default.extend(Ti.prototype,{func:Ti,args:function(){return[this.symbol]},recurse:function(){return this},eval:function(e,t){return 1},getUnits:function(){return[{unit:this.symbol,pow:1}]},codegen:function(){return"1"},print:function(){return this.symbol},tex:function(){return this.symbol},collect:function(e){if(m.default(Mi).has(this.symbol))return this;if(m.default(Ri).has(this.symbol))return Ri[this.symbol].conversion;throw new Error("could not understand unit: "+this.symbol)}});var Mi={m:new Ti("m"),g:new Ti("g"),s:new Ti("s"),A:new Ti("A"),K:new Ti("K"),mol:new Ti("mol"),cd:new Ti("cd")},Ai={a:new di(new Si(10),new Si(-18)),f:new di(new Si(10),new Si(-15)),p:new di(new Si(10),new Si(-12)),n:new di(new Si(10),new Si(-9)),u:new di(new Si(10),new Si(-6)),m:new di(new Si(10),new Si(-3)),c:new di(new Si(10),new Si(-2)),d:new di(new Si(10),new Si(-1)),da:new Si(10),h:new di(new Si(10),new Si(2)),k:new di(new Si(10),new Si(3)),M:new di(new Si(10),new Si(6)),G:new di(new Si(10),new Si(9)),T:new di(new Si(10),new Si(12)),P:new di(new Si(10),new Si(15)),E:new di(new Si(10),new Si(18)),hella:new di(new Si(10),new Si(27))},Pi={},Di={},Ii=function(e,t){var n=e.split("|"),r=n[0].trim(),s=n[1].trim(),a=xi.One;""!==r&&(a=Ni(r).expr);var i=s.split("/"),o=[a];return i[0]&&i[0].split(" ").filter((function(e){return""!==e})).map((function(e){o.push(new Ti(e))})),i[1]&&i[1].split(" ").filter((function(e){return""!==e})).map((function(e){o.push(new di(new Ti(e),xi.Div))})),{conversion:new ui(o),prefixes:t}},Ri={Da:Ii("1.6605388628 x 10^-24 | g",Pi),u:Ii("| Da",Di),meter:Ii("| m",Di),meters:Ii("| m",Di),in:Ii("254 / 10000 | m",Di),ft:Ii("3048 / 10000 | m",Di),yd:Ii("9144 / 10000 | m",Di),mi:Ii("1609344 / 1000 | m",Di),ly:Ii("9.4607 x 10^15 | m",Di),nmi:Ii("1852 | m",Di),"Å":Ii("10^-10 | m",Di),pc:Ii("3.0857 x 10^16 | m",Di),min:Ii("60 | s",Di),hr:Ii("3600 | s",Di),sec:Ii("| s",Di),day:Ii("86400 | s",Di),wk:Ii("604800 | s",Di),fortnight:Ii("14 | day",Di),shake:Ii("10^-8 | s",Di),olympiad:Ii("126200000 | s",Di),"°C":Ii("1 | K",Di),"°F":Ii("5/9 | K",Di),"°R":Ii("5/9 | K",Di),e:Ii("1.6021765314 x 10^-19 | C",Di),c:Ii("299792458 | m / s",Di),kn:Ii("514/1000 | m / s",Di),kt:Ii("| kn",Di),knot:Ii("| kn",Di),J:Ii("| N m",Pi),BTU:Ii("1060 | J",Di),cal:Ii("4184 / 1000 | J",Pi),eV:Ii("1.602176514 x 10^-19 | J",Pi),erg:Ii("10^−7 | J",Pi),W:Ii("| J / s",Pi),"H-e":Ii("80 | W",Di),N:Ii("1000 | g m / s s",Pi),lb:Ii("4448221615 / 1000000000 | N",Di),dyn:Ii("10^-5 | N",Di),Pa:Ii("1 | N / m m m",Pi),bar:Ii("10^5 | Pa",Pi),"㏔":Ii("1/1000 | bar",Di),"㍴":Ii("| bar",Di),atm:Ii("101325 | Pa",Di),Torr:Ii("1/760 | atm",Di),mmHg:Ii("| Torr",Di),ha:Ii("10^4 | m m",Di),b:Ii("10^−28 | m m",Pi),barn:Ii("| b",Pi),acre:Ii("4046.87 | m m",Di),skilodge:Ii("10^-31 | m m",Di),outhouse:Ii("10^-34 | m m",Di),shed:Ii("10^-52 | m m",Di),L:Ii("1/1000 | m m m",Pi),gal:Ii("3785/1000 | L",Pi),cup:Ii("1/16 | gal",Di),qt:Ii("1/4 | gal",Di),quart:Ii("| qt",Di),p:Ii("1/8 | gal",Di),pt:Ii("| p",Di),pint:Ii("| p",Di),"fl oz":Ii("1/8 | cup",Di),"fl. oz.":Ii("1/8 | cup",Di),tbsp:Ii("1/16 | cup",Di),tsp:Ii("1/3 | tbsp",Di),rev:Ii("2 pi | rad",Di),deg:Ii("180 pi | rad",Di),"°":Ii("| deg",Di),arcminute:Ii("1/60 | deg",Di),arcsec:Ii("1/3600 | deg",Di),Hu:Ii("1000 | dB",Pi),dozen:Ii("12 |",Di),mol:Ii("6.0221412927 x 10^23 |",Pi),"%":Ii("1/100 |",Di),percent:Ii("| %",Di),ppm:Ii("1/1000000 |",Di),V:Ii("1000 | g m m / s s C",Pi),C:Ii("| A s",Pi),ampere:Ii("| A",Di),"Ω":Ii("| V / A",Pi),ohm:Ii("| Ω",Di),F:Ii("| C / V",Pi),H:Ii("| ohm s",Pi),T:Ii("1000 | g / C s",Pi),Wb:Ii("1000 | g m m / C s",Pi),lm:Ii("pi x 10^4 | cd / m m",Di),lx:Ii("| lm / m m",Di),nit:Ii("| cd / m m",Di),sb:Ii("10^4 | cd / m m",Di),stilb:Ii("1 | sb",Di),apostilb:Ii("1 / pi x 10^(-4) | sb",Di),blondel:Ii("| apostilb",Di),asb:Ii("| apostilb",Di),la:Ii("| lm",Di),Lb:Ii("| lm",Di),sk:Ii("10^-7 | lm",Di),skot:Ii("| sk",Di),bril:Ii("10^-11 | lm",Di),Hz:Ii("| / s",Pi)};const zi=f.default,Li=g.default({displayName:"SortableArea",propTypes:{className:zi.string,components:zi.arrayOf(zi.node).isRequired,onReorder:zi.func.isRequired,style:zi.any,verify:zi.func},getDefaultProps:function(){return{verify:()=>!0}},getInitialState:function(){return{dragging:null,components:this.props.components}},componentDidMount:function(){this._setDragEvents()},UNSAFE_componentWillReceiveProps:function(e){this.setState({components:e.components})},componentDidUpdate:function(){this._setDragEvents()},onDragStart:function(e){this.setState({dragging:e})},onDrop:function(){this.setState({dragging:null}),this.props.onReorder(this.state.components)},onDragEnter:function(e){if(this.state.dragging===e)return;const t=this.state.components.slice(),n=t.splice(this.state.dragging,1);t.splice(e,0,n[0]);const r=this.props.verify(t);return r&&this.setState({dragging:e,components:t}),r},_listenEvent:function(e){e.dataTransfer.setData("hackhackhack","because browsers!")},_cancelEvent:function(e){e.preventDefault()},_setDragEvents:function(){this._dragItems=this._dragItems||[];const e=b.default.findDOMNode(this).querySelectorAll("[draggable=true]"),t=[],n=[];for(let n=0;n<this._dragItems.length;n++){const r=this._dragItems[n];e.indexOf(r)<0&&t.push(r)}for(let t=0;t<e.length;t++){const r=e[t];this._dragItems.indexOf(r)<0&&n.push(r)}for(let e=0;e<n.length;e++){const t=n[e];t.addEventListener("dragstart",this._listenEvent),t.addEventListener("drop",this._cancelEvent)}for(let e=0;e<t.length;e++){const n=t[e];n.removeEventListener("dragstart",this._listenEvent),n.removeEventListener("drop",this._cancelEvent)}},render:function(){const e=this.state.components.map(((e,t)=>u.createElement(Fi,{index:t,component:e,area:this,key:e.key,draggable:e.props.draggable,dragging:t===this.state.dragging})));return u.createElement("ol",{className:this.props.className,style:this.props.style},e)}}),Fi=g.default({displayName:"SortableItem",propTypes:{area:zi.shape({onDragEnter:zi.func.isRequired,onDragStart:zi.func.isRequired,onDrop:zi.func.isRequired}),component:zi.node.isRequired,dragging:zi.bool.isRequired,draggable:zi.bool.isRequired,index:zi.number.isRequired},handleDragStart:function(e){e.nativeEvent.dataTransfer.effectAllowed="move",this.props.area.onDragStart(this.props.index)},handleDrop:function(){this.props.area.onDrop(this.props.index)},handleDragEnter:function(e){const t=this.props.area.onDragEnter(this.props.index);e.nativeEvent.dataTransfer.effectAllowed=t?"move":"none"},handleDragOver:function(e){e.preventDefault()},render:function(){let e="sortable-disabled";return this.props.dragging?e="sortable-dragging":this.props.draggable&&(e="sortable-enabled"),u.createElement("li",{draggable:this.props.draggable,className:e,onDragStart:this.handleDragStart,onDrop:this.handleDrop,onDragEnter:this.handleDragEnter,onDragOver:this.handleDragOver},this.props.component)}}),{InfoTip:Ui,PropCheckBox:qi,TexButtons:Wi}=e.components,{getDependencies:Vi}=e.Dependencies,ji=["correct","wrong","ungraded"],Bi=f.default.shape({considered:f.default.oneOf(ji).isRequired,value:f.default.string.isRequired,form:f.default.bool.isRequired,simplify:f.default.bool.isRequired}),$i=e=>{const t=[];e.forEach((e=>{t[e.key]=!0}));for(let e=0;e<t.length;e++)if(!t[e])return e;return t.length};class Hi extends u.Component{constructor(t){var n;let r;super(t),n=this,x(this,"change",(function(){for(var t=arguments.length,r=new Array(t),s=0;s<t;s++)r[s]=arguments[s];return e.Changeable.change.apply(n,r)})),x(this,"serialize",(()=>{const e=["value","form","simplify","considered","key"],t=["answerForms","buttonSets","functions","times"],n=this.props.answerForms.map((t=>m.default(t).pick(e)));return rs(this.props).set(["answerForms"],n).mod([],(e=>m.default(e).pick(t))).freeze()})),x(this,"getSaveWarnings",(()=>{const e=[];if(0===this.props.answerForms.length)e.push("No answers specified");else{!!m.default(this.props.answerForms).find((e=>"correct"===e.considered))||e.push("No correct answer specified"),m.default(this.props.answerForms).each(((t,n)=>{if(""===this.props.value)e.push("Answer ".concat(n+1," is empty"));else{const n=Ni(t.value,{functions:this.props.functions});n.parsed?t.simplify&&!n.expr.isSimplified()&&e.push("".concat(t.value,' isn\'t simplified, but is required" +\n " to be')):e.push("Couldn't parse ".concat(t.value))}}))}return e})),x(this,"_newEmptyAnswerForm",(()=>({considered:"correct",form:!1,key:$i(this.props.answerForms),simplify:!1,value:""}))),x(this,"newAnswer",(()=>{const e=this.props.answerForms.slice();e.push(this._newEmptyAnswerForm()),this.change({answerForms:e})})),x(this,"handleRemoveForm",(e=>{const t=this.props.answerForms.slice();t.splice(e,1),this.change({answerForms:t})})),x(this,"updateForm",((e,t)=>{const n=rs(this.props.answerForms).merge([e],t).freeze();this.change({answerForms:n})})),x(this,"handleReorder",(e=>{const t=m.default(e).map((e=>{const t=m.default(e.props).pick("considered","form","simplify","value");return t.key=e.key,t}));this.change({answerForms:t})})),x(this,"handleButtonSet",(e=>{const t=m.default(Wi.buttonSets).keys(),n=m.default(t).filter((t=>m.default(this.props.buttonSets).contains(t)!==(t===e)));this.props.onChange({buttonSets:n})})),x(this,"handleToggleDiv",(()=>{let e,t;m.default(this.props.buttonSets).contains("basic+div")?(e="basic",t="basic+div"):(e="basic+div",t="basic");const n=m.default(this.props.buttonSets).reject((e=>e===t)).concat(e);this.change("buttonSets",n)})),x(this,"handleTexInsert",(e=>{this.refs.expression.insert(e)})),x(this,"handleFunctions",(e=>{const t={};t.functions=m.default.compact(e.target.value.split(/[ ,]+/)),this.props.onChange(t)})),r=0===t.answerForms.length||m.default(t.answerForms).any((e=>{const{value:t}=e;return-1!==m.default.indexOf(t,"\\")||-1!==m.default.indexOf(t,"{")})),this.state={isTex:r}}render(){const e=this.props.answerForms.map(((e,t)=>{const n={times:this.props.times,functions:this.props.functions,buttonSets:this.props.buttonSets,buttonsVisible:"focused",form:e.form,simplify:e.simplify,value:e.value,onChange:e=>this.updateForm(t,e),trackInteraction:()=>{},widgetId:this.props.widgetId+"-"+t};return rs(e).merge([],{draggable:!0,onChange:e=>this.updateForm(t,e),onDelete:()=>this.handleRemoveForm(t),expressionProps:n}).freeze()})).map(((e,t)=>u.createElement(Gi,C({key:t},e)))),t=u.createElement(Li,{components:e,onReorder:this.handleReorder,className:"answer-options-list"}),n=m.default(Wi.buttonSets).map(((e,t)=>{const n="basic"===t,r=m.default.contains(this.props.buttonSets,t)||n,s=n?"button-set-label-float":"button-set-label";return u.createElement("label",{className:s,key:t},u.createElement("input",{type:"checkbox",checked:r,disabled:n,onChange:()=>this.handleButtonSet(t)}),t)})),{TeX:r}=Vi();return n.splice(1,1,u.createElement("label",{key:"show-div"},u.createElement("input",{type:"checkbox",onChange:this.handleToggleDiv}),u.createElement("span",{className:"show-div-button"},"show ",u.createElement(r,null,"\\div")," button"))),u.createElement("div",{className:"perseus-widget-expression-editor"},u.createElement("h3",{className:"expression-editor-h3"},"Global Options"),u.createElement("div",null,u.createElement(qi,{times:this.props.times,onChange:this.props.onChange,labelAlignment:"right",label:"Use × for rendering multiplication instead of a center dot."}),u.createElement(Ui,null,u.createElement("p",null,"For pre-algebra problems this option displays multiplication as \\times instead of \\cdot in both the rendered output and the acceptable formats examples."))),u.createElement("div",null,u.createElement("label",null,"Function variables: ",u.createElement("input",{type:"text",defaultValue:this.props.functions.join(" "),onChange:this.handleFunctions})),u.createElement(Ui,null,u.createElement("p",null,'Single-letter variables listed here will be interpreted as functions. This let us know that f(x) means "f of x" and not "f times x".'))),u.createElement("div",null,u.createElement("div",null,"Button sets:"),n),this.state.isTex&&u.createElement(Wi,{className:"math-input-buttons",sets:this.props.buttonSets,convertDotToTimes:this.props.times,onInsert:this.handleTexInsert}),u.createElement("h3",{className:"expression-editor-h3"},"Answers"),u.createElement("p",{style:{margin:"4px 0"}},"student responses area matched against these from top to bottom"),t,u.createElement("div",null,u.createElement("button",{className:"simple-button orange",style:{fontSize:13},onClick:this.newAnswer,type:"button"},"Add new answer")))}}x(Hi,"propTypes",{...e.Changeable.propTypes,answerForms:f.default.arrayOf(Bi),times:f.default.bool,buttonSets:Wi.buttonSetsType,functions:f.default.arrayOf(f.default.string)}),x(Hi,"widgetName","expression"),x(Hi,"defaultProps",{answerForms:[],times:!1,buttonSets:["basic"],functions:["f","g","h"]});class Gi extends u.Component{constructor(){var t;super(...arguments),t=this,x(this,"state",{deleteFocused:!1}),x(this,"handleDeleteBlur",(()=>{this.setState({deleteFocused:!1})})),x(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),x(this,"handleImSure",(()=>{this.props.onDelete()})),x(this,"handleDelete",(()=>{this.setState({deleteFocused:!0})})),x(this,"toggleConsidered",(()=>{const e=function(e,t){let n=m.default(e).indexOf(t);return n=(n+1)%e.length,e[n]}(ji,this.props.considered);this.change({considered:e})}))}render(){let t=null;return t=this.state.deleteFocused?u.createElement("button",{type:"button",className:"simple-button orange",onClick:this.handleImSure,onBlur:this.handleDeleteBlur},"I'm sure!"):u.createElement("button",{type:"button",className:"simple-button orange",onClick:this.handleDelete},"Delete"),u.createElement("div",{className:"expression-answer-option"},u.createElement("div",{className:"answer-handle"}),u.createElement("div",{className:"answer-body"},u.createElement("div",{className:"answer-considered"},u.createElement("div",{onClick:this.toggleConsidered,className:"answer-status "+this.props.considered},this.props.considered),u.createElement("div",{className:"answer-expression"},u.createElement(e.Expression,this.props.expressionProps))),u.createElement("div",{className:"answer-option"},u.createElement(qi,{form:this.props.form,onChange:this.props.onChange,labelAlignment:"right",label:"Answer expression must have the same form."}),u.createElement(Ui,null,u.createElement("p",null,"The student's answer must be in the same form. Commutativity and excess negative signs are ignored."))),u.createElement("div",{className:"answer-option"},u.createElement(qi,{simplify:this.props.simplify,onChange:this.props.onChange,labelAlignment:"right",label:"Answer expression must be fully expanded and simplified."}),u.createElement(Ui,null,u.createElement("p",null,'The student\'s answer must be fully expanded and simplified. Answering this equation (x^2+2x+1) with this factored equation (x+1)^2 will render this response "Your answer is not fully expanded and simplified."'))),u.createElement("div",{className:"remove-container"},t)))}}x(Gi,"propTypes",{...e.Changeable.propTypes,considered:f.default.oneOf(ji).isRequired,expressionProps:f.default.object.isRequired,form:f.default.bool.isRequired,simplify:f.default.bool.isRequired,onChange:f.default.func.isRequired,onDelete:f.default.func.isRequired});const{InlineIcon:Yi,TextInput:Ki}=e.components,{iconPlus:Ji,iconTrash:Xi}=e.icons;class Zi extends u.Component{constructor(){var t;super(...arguments),t=this,x(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),x(this,"handleAddHint",(()=>{this.props.onChange({hint:{content:""}},(()=>{this.refs["hint-editor"].focus()}))})),x(this,"handleRemoveHint",(e=>{this.props.onChange({hint:null})})),x(this,"getSaveWarnings",(()=>this.refs.editor.getSaveWarnings())),x(this,"serialize",(()=>({title:this.props.title,...this.refs.editor.serialize(),hint:this.refs["hint-editor"]&&this.refs["hint-editor"].serialize()})))}render(){return u.createElement("div",{className:"perseus-group-editor"},u.createElement("div",{className:"perseus-widget-row"},u.createElement("label",{className:o.css(Qi.title)},"Title:"," ",u.createElement(Ki,{value:this.props.title,className:o.css(Qi.input),onChange:this.change("title")}))),u.createElement(Fn,{ref:"editor",content:this.props.content,widgets:this.props.widgets,apiOptions:this.props.apiOptions,images:this.props.images,widgetEnabled:!0,immutableWidgets:!1,onChange:this.props.onChange,warnNoPrompt:!0,warnNoWidgets:!0}),!this.props.hint&&u.createElement("button",{type:"button",style:{marginTop:10},className:"add-hint simple-button orange",onClick:this.handleAddHint},u.createElement(Yi,Ji)," Add a hint"),this.props.hint&&u.createElement("div",{className:"perseus-hint-editor"},u.createElement("div",{className:o.css(Qi.hintsTitle)},"Hint"),u.createElement(Fn,{ref:"hint-editor",content:this.props.hint?this.props.hint.content:"",widgets:this.props.hint?this.props.hint.widgets:{},apiOptions:this.props.apiOptions,images:this.props.hint&&this.props.hint.images,widgetEnabled:!0,immutableWidgets:!1,onChange:e=>{this.change("hint",Object.assign({},this.props.hint,e))}}),u.createElement("button",{type:"button",className:"remove-hint simple-button orange",onClick:this.handleRemoveHint},u.createElement(Yi,Xi)," Remove this hint")))}}x(Zi,"propTypes",{...e.Changeable.propTypes,title:f.default.string,content:f.default.string,widgets:f.default.object,images:f.default.object,apiOptions:e.ApiOptions.propTypes}),x(Zi,"widgetName","graded-group"),x(Zi,"defaultProps",{title:"",content:"",widgets:{},images:{},hint:null});const Qi=o.StyleSheet.create({title:{fontSize:18,fontWeight:"bold"},input:{fontSize:18},hintsTitle:{marginTop:10,fontSize:"110%",fontWeight:"bold"}});class eo extends u.Component{constructor(){var t;super(...arguments),t=this,x(this,"_editors",void 0),x(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),x(this,"getSaveWarnings",(()=>[].concat(...this._editors.map((e=>e?e.getSaveWarnings():[]))))),x(this,"serialize",(()=>({gradedGroups:this.props.gradedGroups}))),x(this,"renderGroups",(()=>this.props.gradedGroups?this.props.gradedGroups.map(((e,t)=>u.createElement(Zi,C({key:t,ref:e=>this._editors[t]=e},e,{apiOptions:this.props.apiOptions,widgetEnabled:!0,immutableWidgets:!1,onChange:e=>this.change("gradedGroups",to(this.props.gradedGroups,t,{...this.props.gradedGroups[t],...e}))})))):null)),x(this,"addGroup",(()=>{const e=this.props.gradedGroups||[];this.change("gradedGroups",e.concat([Zi.defaultProps]))}))}UNSAFE_componentWillMount(){this._editors=[]}render(){return u.createElement("div",{className:"perseus-group-editor"},this.renderGroups(),u.createElement("button",{onClick:this.addGroup},"Add group"))}}x(eo,"propTypes",{...e.Changeable.propTypes,apiOptions:e.ApiOptions.propTypes,gradedGroups:f.default.array,onChange:f.default.func.isRequired}),x(eo,"widgetName","graded-group-set"),x(eo,"defaultProps",{gradedGroups:[]});const to=(e,t,n)=>[...e.slice(0,t),n,...e.slice(t+1)],{ButtonGroup:no,InfoTip:ro,PropCheckBox:so,RangeInput:ao}=e.components,{getDependencies:io}=e.Dependencies,oo={url:null,width:0,height:0};const lo=g.default({displayName:"GraphSettings",propTypes:{...e.Changeable.propTypes,editableSettings:f.default.arrayOf(f.default.oneOf(["canvas","graph","snap","image","measure"])),box:f.default.arrayOf(f.default.number),labels:f.default.arrayOf(f.default.string),range:f.default.arrayOf(f.default.arrayOf(f.default.number)),step:f.default.arrayOf(f.default.number),gridStep:f.default.arrayOf(f.default.number),snapStep:f.default.arrayOf(f.default.number),valid:f.default.oneOfType([f.default.bool,f.default.string]),backgroundImage:f.default.object,markings:f.default.oneOf(["graph","grid","none"]),showProtractor:f.default.bool,showRuler:f.default.bool,showTooltips:f.default.bool,rulerLabel:f.default.string,rulerTicks:f.default.number},getDefaultProps:function(){return{editableSettings:["graph","snap","image","measure"],box:[e.interactiveSizes.defaultBoxSizeSmall,e.interactiveSizes.defaultBoxSizeSmall],labels:["x","y"],range:[[-10,10],[-10,10]],step:[1,1],gridStep:[1,1],snapStep:[1,1],valid:!0,backgroundImage:oo,markings:"graph",showProtractor:!1,showRuler:!1,showTooltips:!1,rulerLabel:"",rulerTicks:10}},getInitialState:function(){return this.stateFromProps(this.props)},componentDidMount:function(){this._isMounted=!0,this.changeGraph=m.default.debounce(this.changeGraph,300)},UNSAFE_componentWillReceiveProps:function(e){m.default.isEqual(this.props.labels,e.labels)&&m.default.isEqual(this.props.gridStep,e.gridStep)&&m.default.isEqual(this.props.snapStep,e.snapStep)&&m.default.isEqual(this.props.step,e.step)&&m.default.isEqual(this.props.range,e.range)&&m.default.isEqual(this.props.backgroundImage,e.backgroundImage)||this.setState(this.stateFromProps(e))},componentWillUnmount:function(){this._isMounted=!1},stateFromProps:function(e){return{labelsTextbox:e.labels,gridStepTextbox:e.gridStep,snapStepTextbox:e.snapStep,stepTextbox:e.step,rangeTextbox:e.range,backgroundImage:m.default.clone(e.backgroundImage)}},change(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return e.Changeable.change.apply(this,n)},changeRulerLabel:function(e){this.change({rulerLabel:e.target.value})},changeRulerTicks:function(e){this.change({rulerTicks:+e.target.value})},changeBackgroundUrl:function(t){if("keypress"===t.type&&"Enter"!==t.key)return;const n=(e,t,n)=>{const r=m.default.clone(this.props.backgroundImage);r.url=e,r.width=t,r.height=n,this.setState({backgroundImage:r},this.changeGraph)},r=b.default.findDOMNode(this.refs["bg-url"]).value;r?e.Util.getImageSize(r,((e,t)=>{this._isMounted&&n(r,e,t)})):n(null,0,0)},renderLabelChoices:function(e){return m.default.map(e,(function(e){return u.createElement("option",{value:e[1]},e[0])}))},validRange:function(e){return m.default.every(e,(function(e){return m.default.isFinite(e)}))?!(e[0]>=e[1])||"Range must have a higher number on the right":"Range must be a valid number"},validateStepValue:function(e){const{step:t,range:n,name:r,minTicks:s,maxTicks:a}=e;if(!m.default.isFinite(t))return r+" must be a valid number";const i=function(e,t){return Math.floor((e[1]-e[0])/t)}(n,t);return i<s?r+" is too large, there must be at least "+s+" ticks.":!(i>a)||r+" is too small, there can be at most "+a+" ticks."},validSnapStep:function(e,t){return this.validateStepValue({step:e,range:t,name:"Snap step",minTicks:5,maxTicks:60})},validGridStep:function(e,t){return this.validateStepValue({step:e,range:t,name:"Grid step",minTicks:3,maxTicks:60})},validStep:function(e,t){return this.validateStepValue({step:e,range:t,name:"Step",minTicks:3,maxTicks:20})},validBackgroundImageSize:function(e){if(!e.url)return!0;return!!(e.width<=450&&e.height<=450)||"Image must be smaller than 450px x 450px."},validateGraphSettings:function(e,t,n,r,s){const a=this;let i;const o=m.default.every(e,(function(e){return i=a.validRange(e),!0===i}));if(!o)return i;const l=m.default.every(t,(function(t,n){return i=a.validStep(t,e[n]),!0===i}));if(!l)return i;const c=m.default.every(n,(function(t,n){return i=a.validGridStep(t,e[n]),!0===i}));if(!c)return i;const p=m.default.every(r,(function(t,n){return i=a.validSnapStep(t,e[n]),!0===i}));if(!p)return i;const h=this.validBackgroundImageSize(s);return!0===h||(i=h,i)},changeLabel:function(e,t){const n=t.target.value,r=this.state.labelsTextbox.slice();r[e]=n,this.setState({labelsTextbox:r},this.changeGraph)},changeRange:function(t,n){const r=this.state.rangeTextbox.slice();r[t]=n;const s=this.state.stepTextbox.slice(),a=this.state.gridStepTextbox.slice(),i=this.state.snapStepTextbox.slice(),o=e.Util.scaleFromExtent(r[t],this.props.box[t]);!0===this.validRange(r[t])&&(s[t]=e.Util.tickStepFromExtent(r[t],this.props.box[t]),a[t]=e.Util.gridStepFromTickStep(s[t],o),i[t]=a[t]/2),this.setState({stepTextbox:s,gridStepTextbox:a,snapStepTextbox:i,rangeTextbox:r},this.changeGraph)},changeStep:function(e){this.setState({stepTextbox:e},this.changeGraph)},changeSnapStep:function(e){this.setState({snapStepTextbox:e},this.changeGraph)},changeGridStep:function(e){this.setState({gridStepTextbox:e,snapStepTextbox:m.default.map(e,(function(e){return e/2}))},this.changeGraph)},changeGraph:function(){const e=this.state.labelsTextbox,t=m.default.map(this.state.rangeTextbox,(function(e){return m.default.map(e,Number)})),n=m.default.map(this.state.stepTextbox,Number),r=this.state.gridStepTextbox,s=this.state.snapStepTextbox,a=this.state.backgroundImage,i=this.validateGraphSettings(t,n,r,s,a);!0===i?this.change({valid:!0,labels:e,range:t,step:n,gridStep:r,snapStep:s,backgroundImage:a}):this.change({valid:i})},render:function(){const t=[e.KhanMath.roundTo(2,e.Util.scaleFromExtent(this.props.range[0],this.props.box[0])),e.KhanMath.roundTo(2,e.Util.scaleFromExtent(this.props.range[1],this.props.box[1]))],{TeX:n}=io();return u.createElement("div",null,m.default.contains(this.props.editableSettings,"canvas")&&u.createElement("div",{className:"graph-settings"},u.createElement("div",{className:"perseus-widget-row"},"Canvas size (x,y pixels)",u.createElement(ao,{value:this.props.box,onChange:e=>{this.change({box:e})}})),u.createElement("div",{className:"perseus-widget-row"},"Scale (px per div):"," ",u.createElement(n,null,"("+t[0]+", "+t[1]+")"))),m.default.contains(this.props.editableSettings,"graph")&&u.createElement("div",{className:"graph-settings"},u.createElement("div",{className:"perseus-widget-row"},u.createElement("div",{className:"perseus-widget-left-col"}," ","x Label",u.createElement("input",{type:"text",className:"graph-settings-axis-label",ref:"labels-0",onChange:e=>this.changeLabel(0,e),value:this.state.labelsTextbox[0]||""})),u.createElement("div",{className:"perseus-widget-right-col"},"y Label",u.createElement("input",{type:"text",className:"graph-settings-axis-label",ref:"labels-1",onChange:e=>this.changeLabel(1,e),value:this.state.labelsTextbox[1]||""}))),u.createElement("div",{className:"perseus-widget-row"},u.createElement("div",{className:"perseus-widget-left-col"},"x Range",u.createElement(ao,{value:this.state.rangeTextbox[0],onChange:e=>this.changeRange(0,e)})),u.createElement("div",{className:"perseus-widget-right-col"},"y Range",u.createElement(ao,{value:this.state.rangeTextbox[1],onChange:e=>this.changeRange(1,e)}))),u.createElement("div",{className:"perseus-widget-row"},u.createElement("div",{className:"perseus-widget-left-col"},"Tick Step",u.createElement(ao,{value:this.state.stepTextbox,onChange:this.changeStep})),u.createElement("div",{className:"perseus-widget-right-col"},"Grid Step",u.createElement(ao,{value:this.state.gridStepTextbox,onChange:this.changeGridStep}))),m.default.contains(this.props.editableSettings,"snap")&&u.createElement("div",{className:"perseus-widget-row"},u.createElement("div",{className:"perseus-widget-left-col"},"Snap Step",u.createElement(ao,{value:this.state.snapStepTextbox,onChange:this.changeSnapStep}))),u.createElement("div",{className:"perseus-widget-row"},u.createElement("label",null,"Markings: "),u.createElement(no,{value:this.props.markings,allowEmpty:!1,buttons:[{value:"graph",content:"Graph"},{value:"grid",content:"Grid"},{value:"none",content:"None"}],onChange:this.change("markings")})),u.createElement("div",{className:"perseus-widget-left-col"},u.createElement(so,{label:"Show tooltips",showTooltips:this.props.showTooltips,onChange:this.change}))),m.default.contains(this.props.editableSettings,"image")&&u.createElement("div",{className:"image-settings"},u.createElement("div",null,"Background image:"),u.createElement("div",null,"Url:"," ",u.createElement("input",{type:"text",className:"graph-settings-background-url",ref:"bg-url",value:this.state.backgroundImage.url||"",onChange:e=>{const t=m.default.clone(this.props.backgroundImage);t.url=e.target.value,this.setState({backgroundImage:t})},onKeyPress:this.changeBackgroundUrl,onBlur:this.changeBackgroundUrl}),u.createElement(ro,null,u.createElement("p",null,'Create an image in graphie, or use the "Add image" function to create a background.')))),m.default.contains(this.props.editableSettings,"measure")&&u.createElement("div",{className:"misc-settings"},u.createElement("div",{className:"perseus-widget-row"},u.createElement("div",{className:"perseus-widget-left-col"},u.createElement(so,{label:"Show ruler",showRuler:this.props.showRuler,onChange:this.change})),u.createElement("div",{className:"perseus-widget-right-col"},u.createElement(so,{label:"Show protractor",showProtractor:this.props.showProtractor,onChange:this.change}))),this.props.showRuler&&u.createElement("div",null,u.createElement("div",null,u.createElement("label",null," ","Ruler label:"," ",u.createElement("select",{onChange:this.changeRulerLabel,value:this.props.rulerLabel},u.createElement("option",{value:""},"None"),u.createElement("optgroup",{label:"Metric"},this.renderLabelChoices([["milimeters","mm"],["centimeters","cm"],["meters","m"],["kilometers","km"]])),u.createElement("optgroup",{label:"Imperial"},this.renderLabelChoices([["inches","in"],["feet","ft"],["yards","yd"],["miles","mi"]]))))),u.createElement("div",null,u.createElement("label",null," ","Ruler ticks:"," ",u.createElement("select",{onChange:this.changeRulerTicks,value:this.props.rulerTicks},m.default.map([1,2,4,8,10,16],(function(e){return u.createElement("option",{value:e},e)}))))))))}}),{InfoTip:co,MultiButtonGroup:po}=e.components,{containerSizeClass:ho,getInteractiveBoxFromSizeClass:uo}=e.SizingUtils,mo=e.GrapherWidget.widget,{DEFAULT_GRAPHER_PROPS:fo,allTypes:go,chooseType:vo,defaultPlotProps:yo,getEquationString:bo,typeToButton:Eo}=e.GrapherUtil;class wo extends u.Component{constructor(){var t;super(...arguments),t=this,x(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),x(this,"handleAvailableTypesChange",(e=>{let t=this.props.correct;if(!m.default.contains(e,this.props.correct.type)){const n=this.props.graph,r=vo(e);t=yo(r,n)}this.props.onChange({availableTypes:e,correct:t})})),x(this,"serialize",(()=>m.default.chain(this.props).pick("correct","availableTypes").extend({graph:m.default.omit(this.props.graph,"box")}).value()))}render(){const e=ho.SMALL;let t,n;if(!0===this.props.graph.valid){const r={graph:this.props.graph,plot:this.props.correct,availableTypes:this.props.availableTypes,onChange:(e,t)=>{var n;let r=this.props.correct;r=r.type===(null===(n=e.plot)||void 0===n?void 0:n.type)?m.default.extend({},r,e.plot):e.plot,this.props.onChange({correct:r},t)},trackInteraction:function(){}};n=u.createElement(mo,C({},r,{apiOptions:this.props.apiOptions,containerSizeClass:e})),t=bo(r)}else n=u.createElement("div",{className:"perseus-error"},this.props.graph.valid);return u.createElement("div",null,u.createElement("div",null,"Correct answer"," ",u.createElement(co,null,u.createElement("p",null,"Graph the correct answer in the graph below and ensure the equation or point coordinates displayed represent the correct answer."))," ",": ",t),u.createElement(lo,{editableSettings:["graph","snap","image"],box:uo(e),range:this.props.graph.range,labels:this.props.graph.labels,step:this.props.graph.step,gridStep:this.props.graph.gridStep,snapStep:this.props.graph.snapStep,valid:this.props.graph.valid,backgroundImage:this.props.graph.backgroundImage,markings:this.props.graph.markings,rulerLabel:this.props.graph.rulerLabel,rulerTicks:this.props.graph.rulerTicks,showTooltips:this.props.graph.showTooltips,onChange:this.change("graph")}),u.createElement("div",{className:"perseus-widget-row"},u.createElement("label",null,"Available functions: "),u.createElement(po,{allowEmpty:!1,values:this.props.availableTypes,buttons:m.default.map(go,Eo),onChange:this.handleAvailableTypesChange})),n)}}x(wo,"propTypes",{...e.Changeable.propTypes}),x(wo,"widgetName","grapher"),x(wo,"defaultProps",{correct:fo.plot,graph:fo.graph,availableTypes:fo.availableTypes});class xo extends u.Component{constructor(){var t;super(...arguments),t=this,x(this,"_renderMetadataEditor",(()=>{const e=this.props.apiOptions.GroupMetadataEditor;return u.createElement(e,{value:this.props.metadata,onChange:this.change("metadata")})})),x(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),x(this,"getSaveWarnings",(()=>this.refs.editor.getSaveWarnings())),x(this,"serialize",(()=>m.default.extend({},this.refs.editor.serialize(),{metadata:this.props.metadata})))}render(){return u.createElement("div",{className:"perseus-group-editor"},u.createElement("div",null,this._renderMetadataEditor()),u.createElement(Fn,{ref:"editor",content:this.props.content,widgets:this.props.widgets,apiOptions:this.props.apiOptions,images:this.props.images,widgetEnabled:!0,immutableWidgets:!1,onChange:this.props.onChange}))}}x(xo,"propTypes",{...e.Changeable.propTypes,content:f.default.string,widgets:f.default.object,images:f.default.object,metadata:f.default.any,apiOptions:e.ApiOptions.propTypes}),x(xo,"widgetName","group"),x(xo,"defaultProps",{content:"",widgets:{},images:{},metadata:void 0});const{PropCheckBox:Co}=e.components;class So extends u.Component{constructor(){var t;super(...arguments),t=this,x(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),x(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){return u.createElement("fieldset",null,u.createElement("label",null,"Name:",u.createElement(zs,{value:this.props.name,onChange:this.change("name")})),u.createElement("label",null,"Value:",u.createElement(zs,{value:this.props.value,onChange:this.change("value")})))}}x(So,"propTypes",{...e.Changeable.propTypes,name:f.default.string,value:f.default.string}),x(So,"defaultProps",{name:"",value:""});class ko extends u.Component{constructor(){var t;super(...arguments),t=this,x(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),x(this,"handlePairChange",((e,t)=>{const n=this.props.pairs.slice();n[e]=t;const r=n[n.length-1];r.name&&r.value&&n.push({name:"",value:""}),this.change("pairs",n)})),x(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){const e=m.default.map(this.props.pairs,((e,t)=>u.createElement(So,{key:t,name:e.name,value:e.value,onChange:this.handlePairChange.bind(this,t)})));return u.createElement("div",null,e)}}x(ko,"propTypes",{...e.Changeable.propTypes,pairs:f.default.arrayOf(f.default.shape({name:f.default.string,value:f.default.string})).isRequired});class No extends u.Component{constructor(){var t;super(...arguments),t=this,x(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),x(this,"handleSettingsChange",(e=>{this.change({settings:e.pairs})})),x(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){return u.createElement("div",null,u.createElement("div",{style:{fontWeight:"bold",textAlign:"center"}},"This widget is deprecated! ",u.createElement("br",null),"Try using the Video or CS Program widgets instead."),u.createElement("label",null,"Url or Program ID:",u.createElement(zs,{value:this.props.url,onChange:this.change("url")})),u.createElement("br",null),u.createElement("label",null,"Settings:",u.createElement(ko,{name:"settings",pairs:this.props.settings,onChange:this.handleSettingsChange})),u.createElement("br",null),u.createElement("label",null,"Width:",u.createElement(zs,{value:this.props.width,onChange:this.change("width")})),u.createElement("label",null,"Height:",u.createElement(zs,{value:this.props.height,onChange:this.change("height")})),u.createElement(Co,{label:"Allow full screen",allowFullScreen:this.props.allowFullScreen,onChange:this.props.onChange}),u.createElement("br",null),u.createElement(Co,{label:"Allow iframe content to redirect the page",allowTopNavigation:this.props.allowTopNavigation,onChange:this.props.onChange}))}}x(No,"propTypes",{...e.Changeable.propTypes}),x(No,"widgetName","iframe"),x(No,"defaultProps",{url:"",settings:[{name:"",value:""}],width:"400",height:"400",allowFullScreen:!1,allowTopNavigation:!1});const{InfoTip:To,InlineIcon:_o,RangeInput:Oo}=e.components,Mo=[0,10],Ao={url:null,width:0,height:0},Po=new RegExp("^(https?|web\\+graphie)://[^/]*(ka-.*.s3.amazonaws.com|(fastly|cdn).kastatic.org|khanacademy.org|kasandbox.org)"),Do=["center","above","above right","right","below right","below","below left","left","above left"],Io=g.default({displayName:"ImageEditor",propTypes:{...e.Changeable.propTypes},statics:{widgetName:"image"},componentDidMount:function(){this._isMounted=!0},componentWillUnmount:function(){this._isMounted=!1},getDefaultProps:function(){return{title:"",range:[Mo,Mo],box:[400,400],backgroundImage:Ao,labels:[],alt:"",caption:""}},getInitialState:function(){return{backgroundImageError:""}},render:function(){const e=this.props.backgroundImage,t=u.createElement("div",{className:"image-settings"},u.createElement("div",null,u.createElement("label",null,u.createElement("div",null,"Alt text:",u.createElement(To,null,"This is important for screenreaders. The content of this alt text will be formatted as markdown (tables, emphasis, etc. are supported).")),u.createElement(Fn,{apiOptions:this.props.apiOptions,content:this.props.alt,onChange:e=>{null!=e.content&&this.change("alt",e.content)},widgetEnabled:!1}))),u.createElement("div",null,u.createElement("label",null,u.createElement("div",null,"Caption:"),u.createElement(Fn,{apiOptions:this.props.apiOptions,content:this.props.caption,onChange:e=>{null!=e.content&&this.change("caption",e.content)},widgetEnabled:!1})))),n=u.createElement("div",{className:"renderer-widget-error"},this.state.backgroundImageError);return u.createElement("div",{className:"perseus-image-editor"},u.createElement("label",null,"Image url:",u.createElement(To,null,"Paste an image or graphie image URL."),this.state.backgroundImageError&&n,u.createElement(zs,{value:e.url||"",style:{width:332},onChange:e=>this.onUrlChange(e,!1)})),e.url&&t)},_renderRowForLabel:function(t,n){return u.createElement("tr",{key:n},u.createElement("td",null,u.createElement(Oo,{value:t.coordinates,onChange:this.onCoordinateChange.bind(this,n)})),u.createElement("td",{style:{verticalAlign:"bottom",width:"5px"}},u.createElement("input",{type:"text",className:"graph-settings-axis-label",value:t.content,onChange:this.onContentChange.bind(this,n)})),u.createElement("td",null,u.createElement("select",{className:"perseus-widget-dropdown",value:t.alignment,onChange:this.onAlignmentChange.bind(this,n)},Do.map((function(e,t){return u.createElement("option",{key:""+t,value:e},e)}),this))),u.createElement("td",null,u.createElement("a",{href:"#",className:"simple-button orange delete-label",title:"Remove this label",onClick:this.removeLabel.bind(this,n)},u.createElement(_o,e.icons.iconTrash))))},change(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return e.Changeable.change.apply(this,n)},removeLabel:function(e,t){t.preventDefault();const n=m.default(this.props.labels).clone();n.splice(e,1),this.props.onChange({labels:n})},onCoordinateChange:function(e,t){const n=this.props.labels.slice();n[e]=m.default.extend({},n[e],{coordinates:t}),this.props.onChange({labels:n})},onContentChange:function(e,t){const n=t.target.value,r=this.props.labels.slice();r[e]=m.default.extend({},r[e],{content:n}),this.props.onChange({labels:r})},onAlignmentChange:function(e,t){const n=t.target.value,r=this.props.labels.slice();r[e]=m.default.extend({},r[e],{alignment:n}),this.props.onChange({labels:r})},setUrl:function(e,t,n,r){if(!this._isMounted)return;const s=m.default.clone(this.props.backgroundImage);s.url=e,s.width=t,s.height=n;const a=[s.width,s.height];this.props.onChange({backgroundImage:s,box:a},null,r)},onUrlChange:function(t,n){Po.test(t)?(this.setState({backgroundImageError:""}),this._leadingUrl=t,t?e.Util.getImageSize(t,((e,n)=>{this._leadingUrl===t&&this.setUrl(t,e,n,!0)})):this.setUrl(t,0,0,n)):this.setState({backgroundImageError:"Images must be from sites hosted by Khan Academy. Please input a Khan Academy-owned address, or use the Add Image tool to rehost an existing image"})},onRangeChange:function(e,t){const n=this.props.range.slice();n[e]=t,this.props.onChange({range:n})},serialize(){return e.EditorJsonify.serialize.call(this)}}),{InfoTip:Ro}=e.components,zo={number:{name:"Numbers",forms:"integer, decimal, proper, improper, mixed"},decimal:{name:"Decimals",forms:"decimal"},integer:{name:"Integers",forms:"integer"},rational:{name:"Fractions and mixed numbers",forms:"integer, proper, improper, mixed"},improper:{name:"Improper numbers (no mixed)",forms:"integer, proper, improper"},mixed:{name:"Mixed numbers (no improper)",forms:"integer, proper, mixed"},percent:{name:"Numbers or percents",forms:"integer, decimal, proper, improper, mixed, percent"},pi:{name:"Numbers with pi",forms:"pi"}};class Lo extends u.Component{constructor(){super(...arguments),x(this,"handleAnswerChange",(t=>{const n=e.Util.firstNumericalParse(t)||0;this.props.onChange({value:n})})),x(this,"focus",(()=>(b.default.findDOMNode(this.refs.input).focus(),!0))),x(this,"serialize",(()=>m.default.pick(this.props,"value","simplify","size","inexact","maxError","answerType","rightAlign")))}render(){const t=m.default.map(zo,(function(e,t){return u.createElement("option",{value:t,key:t},e.name)}),this);return u.createElement("div",null,u.createElement("div",null,u.createElement("label",null,"Correct answer:"," ",u.createElement(zs,{value:""+this.props.value,onChange:this.handleAnswerChange,ref:"input"}))),u.createElement("div",null,u.createElement("label",null,"Unsimplified answers"," ",u.createElement("select",{value:this.props.simplify,onChange:e=>{this.props.onChange({simplify:e.target.value})}},u.createElement("option",{value:"required"},"will not be graded"),u.createElement("option",{value:"optional"},"will be accepted"),u.createElement("option",{value:"enforced"},"will be marked wrong"))),u.createElement(Ro,null,u.createElement("p",null,'Normally select "will not be graded". This will give the user a message saying the answer is correct but not simplified. The user will then have to simplify it and re-enter, but will not be penalized. (5th grade and anything after)'),u.createElement("p",null,'Select "will be accepted" only if the user is not expected to know how to simplify fractions yet. (Anything prior to 5th grade)'),u.createElement("p",null,'Select "will be marked wrong" only if we are specifically assessing the ability to simplify.'))),u.createElement("div",null,u.createElement("label",null,u.createElement("input",{type:"checkbox",checked:this.props.inexact,onChange:e=>{this.props.onChange({inexact:e.target.checked})}})," ","Allow inexact answers"),u.createElement("label",null,u.createElement("input",{type:"checkbox",style:{visibility:"hidden"}}),"Max error:"," ",u.createElement("input",{type:"text",disabled:!this.props.inexact,defaultValue:this.props.maxError,onBlur:t=>{const n=""+(e.Util.firstNumericalParse(t.target.value)||0);t.target.value=n,this.props.onChange({maxError:n})}}))),u.createElement("div",null,"Answer type:"," ",u.createElement("select",{value:this.props.answerType,onChange:e=>{this.props.onChange({answerType:e.target.value})}},t),u.createElement(Ro,null,u.createElement("p",null,'Use the default "Numbers" unless the answer must be in a specific form (e.g., question is about converting decimals to fractions).'))),u.createElement("div",null,u.createElement("label",null,"Width"," ",u.createElement("select",{value:this.props.size,onChange:e=>{this.props.onChange({size:e.target.value})}},u.createElement("option",{value:"normal"},"Normal (80px)"),u.createElement("option",{value:"small"},"Small (40px)"))),u.createElement(Ro,null,u.createElement("p",null,'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.'))),u.createElement("div",null,u.createElement("label",null,u.createElement("input",{type:"checkbox",checked:this.props.rightAlign,onChange:e=>{this.props.onChange({rightAlign:e.target.checked})}})," ","Right alignment")))}}x(Lo,"propTypes",{value:f.default.number,simplify:f.default.oneOf(["required","optional","enforced"]),size:f.default.oneOf(["normal","small"]),inexact:f.default.bool,maxError:f.default.number,answerType:f.default.string,rightAlign:f.default.bool}),x(Lo,"widgetName","input-number"),x(Lo,"defaultProps",{value:0,simplify:"required",size:"normal",inexact:!1,maxError:.1,answerType:"number",rightAlign:!1});const{ButtonGroup:Fo,MathInput:Uo,NumberInput:qo}=e.components;class Wo extends u.Component{constructor(){super(...arguments),x(this,"change",(t=>e.Changeable.change.call(this,t)))}render(){const{TeX:t}=e.Dependencies.getDependencies();return u.createElement("div",null,u.createElement("div",{className:"perseus-widget-row"},"Constraint:"," ",u.createElement(Fo,{value:this.props.constraint,allowEmpty:!1,buttons:[{value:"none",content:"None"},{value:"snap",content:"Snap"},{value:"x",content:"x="},{value:"y",content:"y="}],onChange:this.change("constraint")})),"snap"===this.props.constraint&&u.createElement("div",{className:"perseus-widget-row"},"Snap:"," ",u.createElement(qo,{value:this.props.snap,placeholder:0,onChange:this.change("snap")})),"x"===this.props.constraint&&u.createElement("div",{className:"graph-settings"},u.createElement("div",{className:"perseus-widget-row"},u.createElement(t,null,"x=")," ",u.createElement(Uo,{buttonSets:[],buttonsVisible:"never",value:this.props.constraintFn,onChange:this.change("constraintFn")}))),"y"===this.props.constraint&&u.createElement("div",{className:"graph-settings"},u.createElement("div",{className:"perseus-widget-row"},u.createElement(t,null,"y=")," ",u.createElement(Uo,{buttonSets:[],buttonsVisible:"never",value:this.props.constraintFn,onChange:this.change("constraintFn")}))),"Ensure these are set so nothing can be dragged off the canvas:",u.createElement("div",{className:"perseus-widget-row"},u.createElement("div",{className:"perseus-widget-row"},u.createElement(t,null,"x \\in \\Large[")," ",u.createElement(Uo,{buttonSets:[],buttonsVisible:"never",value:this.props.constraintXMin,onChange:this.change("constraintXMin")}),u.createElement(t,null,", ")," ",u.createElement(Uo,{buttonSets:[],buttonsVisible:"never",value:this.props.constraintXMax,onChange:this.change("constraintXMax")})," ",u.createElement(t,null,"\\Large]"))),u.createElement("div",{className:"perseus-widget-row"},u.createElement("div",{className:"perseus-widget-row"},u.createElement(t,null,"y \\in \\Large[")," ",u.createElement(Uo,{buttonSets:[],buttonsVisible:"never",value:this.props.constraintYMin,onChange:this.change("constraintYMin")}),u.createElement(t,null,", ")," ",u.createElement(Uo,{buttonSets:[],buttonsVisible:"never",value:this.props.constraintYMax,onChange:this.change("constraintYMax")})," ",u.createElement(t,null,"\\Large]"))))}}x(Wo,"defaultProps",{constraint:"none",snap:.5,constraintFn:"0",constraintXMin:"-10",constraintXMax:"10",constraintYMin:"-10",constraintYMax:"10"});const{MathInput:Vo,NumberInput:jo,TextInput:Bo}=e.components,{getDependencies:$o}=e.Dependencies,{unescapeMathMode:Ho}=e.Util;class Go extends u.Component{constructor(){var t;super(...arguments),t=this,x(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),x(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){const{TeX:t}=$o();return u.createElement("div",{className:"graph-settings"},u.createElement("div",{className:"perseus-widget-row"},"Coordinate: ",u.createElement(t,null,"\\Large("),u.createElement(Vo,{buttonSets:[],buttonsVisible:"never",value:this.props.coordX,onChange:this.change("coordX")}),u.createElement(t,null,",")," ",u.createElement(Vo,{buttonSets:[],buttonsVisible:"never",value:this.props.coordY,onChange:this.change("coordY")}),u.createElement(t,null,"\\Large)")),u.createElement("div",{className:"perseus-widget-row"},u.createElement(e.ColorPicker,{value:this.props.color,onChange:this.change("color")})))}}x(Go,"propTypes",{...e.Changeable.propTypes,coordX:f.default.string,coordY:f.default.string,color:f.default.string}),x(Go,"defaultProps",{coordX:"0",coordY:"0",color:e.KhanColors.BLACK});class Yo extends u.Component{constructor(){var t;super(...arguments),t=this,x(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),x(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){const{TeX:t}=$o();return u.createElement("div",{className:"graph-settings"},u.createElement("div",{className:"perseus-widget-row"},"Start: ",u.createElement(t,null,"\\Large("),u.createElement(Vo,{buttonSets:[],buttonsVisible:"never",value:this.props.startX,onChange:this.change("startX")}),u.createElement(t,null,",")," ",u.createElement(Vo,{buttonSets:[],buttonsVisible:"never",value:this.props.startY,onChange:this.change("startY")}),u.createElement(t,null,"\\Large)")),u.createElement("div",{className:"perseus-widget-row"},"End: ",u.createElement(t,null,"\\Large("),u.createElement(Vo,{buttonSets:[],buttonsVisible:"never",value:this.props.endX,onChange:this.change("endX")}),u.createElement(t,null,",")," ",u.createElement(Vo,{buttonSets:[],buttonsVisible:"never",value:this.props.endY,onChange:this.change("endY")}),u.createElement(t,null,"\\Large)")),u.createElement("div",{className:"perseus-widget-row"},u.createElement(e.ColorPicker,{value:this.props.color,onChange:this.change("color")})),u.createElement("div",{className:"perseus-widget-row"},u.createElement(e.DashPicker,{value:this.props.strokeDasharray,onChange:this.change("strokeDasharray")})," ",u.createElement(e.ArrowPicker,{value:this.props.arrows,onChange:this.change("arrows")})),u.createElement("div",{className:"perseus-widget-row"},u.createElement("div",{className:"perseus-widget-left-col"},"Width:"," ",u.createElement(jo,{value:this.props.strokeWidth,placeholder:2,onChange:this.change("strokeWidth")}))))}}x(Yo,"propTypes",{...e.Changeable.propTypes,startX:f.default.string,startY:f.default.string,endX:f.default.string,endY:f.default.string,color:f.default.string,strokeDasharray:f.default.string,arrows:f.default.string,strokeWidth:f.default.number}),x(Yo,"defaultProps",{startX:"-5",startY:"5",endX:"5",endY:"5",color:e.KhanColors.BLACK,strokeDasharray:"",arrows:"",strokeWidth:2});class Ko extends u.Component{constructor(){var t;super(...arguments),t=this,x(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),x(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){const{TeX:e}=$o();return u.createElement("div",{className:"graph-settings"},u.createElement("div",{className:"perseus-widget-row"},"Start: ",u.createElement(e,null,"\\Large("),u.createElement(Vo,{buttonSets:[],buttonsVisible:"never",value:this.props.startX,onChange:this.change("startX")}),u.createElement(e,null,",")," ",u.createElement(Vo,{buttonSets:[],buttonsVisible:"never",value:this.props.startY,onChange:this.change("startY")}),u.createElement(e,null,"\\Large)")),u.createElement("div",{className:"perseus-widget-row"},"Update ",u.createElement(e,null,"(x_n, y_n)")," for ",u.createElement(e,null,"n =")," ",u.createElement(jo,{value:this.props.varSubscript,placeholder:0,onChange:this.change("varSubscript")})),u.createElement(Wo,this.props))}}x(Ko,"propTypes",{...e.Changeable.propTypes,startX:f.default.string,startY:f.default.string,constraint:f.default.string,snap:f.default.number,constraintFn:f.default.string}),x(Ko,"defaultProps",{startX:"0",startY:"0",constraint:"none",snap:.5,constraintFn:"0",constraintXMin:"-10",constraintXMax:"10",constraintYMin:"-10",constraintYMax:"10"});class Jo extends u.Component{constructor(){var t;super(...arguments),t=this,x(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),x(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){const{TeX:e}=$o();return u.createElement("div",{className:"graph-settings"},"Initial position:",u.createElement("div",{className:"perseus-widget-row"},"Start: ",u.createElement(e,null,"\\Large("),u.createElement(Vo,{buttonSets:[],buttonsVisible:"never",value:this.props.startX,onChange:this.change("startX")}),u.createElement(e,null,",")," ",u.createElement(Vo,{buttonSets:[],buttonsVisible:"never",value:this.props.startY,onChange:this.change("startY")}),u.createElement(e,null,"\\Large)")),u.createElement("div",{className:"perseus-widget-row"},"End: ",u.createElement(e,null,"\\Large("),u.createElement(Vo,{buttonSets:[],buttonsVisible:"never",value:this.props.endX,onChange:this.change("endX")}),u.createElement(e,null,",")," ",u.createElement(Vo,{buttonSets:[],buttonsVisible:"never",value:this.props.endY,onChange:this.change("endY")}),u.createElement(e,null,"\\Large)")),u.createElement("div",{className:"perseus-widget-row"},"Start updates ",u.createElement(e,null,"(x_n, y_n)")," for ",u.createElement(e,null,"n ="),u.createElement(jo,{value:this.props.startSubscript,placeholder:0,onChange:this.change("startSubscript")})),u.createElement("div",{className:"perseus-widget-row"},"End updates ",u.createElement(e,null,"(x_m, y_m)")," for ",u.createElement(e,null,"m ="),u.createElement(jo,{value:this.props.endSubscript,placeholder:0,onChange:this.change("endSubscript")})),u.createElement("div",{className:"perseus-widget-row"},"All constraints are applied to the start point."),u.createElement(Wo,this.props))}}x(Jo,"propTypes",{...e.Changeable.propTypes,startX:f.default.string,startY:f.default.string,endX:f.default.string,endY:f.default.string,constraint:f.default.string,snap:f.default.number,constraintFn:f.default.string}),x(Jo,"defaultProps",{startX:"-5",startY:"5",endX:"5",endY:"5",constraint:"none",snap:.5,constraintFn:"0",constraintXMin:"-10",constraintXMax:"10",constraintYMin:"-10",constraintYMax:"10"});class Xo extends u.Component{constructor(){var t;super(...arguments),t=this,x(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),x(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){const{TeX:t}=$o();return u.createElement("div",{className:"graph-settings"},u.createElement("div",{className:"perseus-widget-row"},u.createElement(t,null,this.props.funcName+"(x)=")," ",u.createElement(Vo,{buttonSets:[],buttonsVisible:"never",value:this.props.value,onChange:this.change("value")})),u.createElement("div",{className:"perseus-widget-row"},"Range: ",u.createElement(t,null,"\\Large("),u.createElement(Vo,{buttonSets:[],buttonsVisible:"never",value:this.props.rangeMin,onChange:this.change("rangeMin")}),u.createElement(t,null,",")," ",u.createElement(Vo,{buttonSets:[],buttonsVisible:"never",value:this.props.rangeMax,onChange:this.change("rangeMax")}),u.createElement(t,null,"\\Large)")),u.createElement("div",{className:"perseus-widget-row"},u.createElement(e.ColorPicker,{value:this.props.color,onChange:this.change("color")})),u.createElement("div",{className:"perseus-widget-row"},u.createElement(e.DashPicker,{value:this.props.strokeDasharray,onChange:this.change("strokeDasharray")})),u.createElement("div",{className:"perseus-widget-row"},u.createElement("div",{className:"perseus-widget-left-col"},"Width:"," ",u.createElement(jo,{value:this.props.strokeWidth,placeholder:2,onChange:this.change("strokeWidth")}))))}}x(Xo,"propTypes",{...e.Changeable.propTypes,value:f.default.string,rangeMin:f.default.string,rangeMax:f.default.string,color:f.default.string,strokeDashArray:f.default.string,strokeWidth:f.default.number}),x(Xo,"defaultProps",{value:"x",rangeMin:"-10",rangeMax:"10",color:e.KhanColors.BLUE,strokeDasharray:"",strokeWidth:2});class Zo extends u.Component{constructor(){var t;super(...arguments),t=this,x(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),x(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){const{TeX:t}=$o();return u.createElement("div",{className:"graph-settings"},u.createElement("div",{className:"perseus-widget-row"},u.createElement(t,null,"X(t) =")," ",u.createElement(Vo,{buttonSets:[],buttonsVisible:"never",value:this.props.x,onChange:this.change("x")})),u.createElement("div",{className:"perseus-widget-row"},u.createElement(t,null,"Y(t) =")," ",u.createElement(Vo,{buttonSets:[],buttonsVisible:"never",value:this.props.y,onChange:this.change("y")})),u.createElement("div",{className:"perseus-widget-row"},"Range: ",u.createElement(t,null,"\\Large("),u.createElement(Vo,{buttonSets:[],buttonsVisible:"never",value:this.props.rangeMin,onChange:this.change("rangeMin")}),u.createElement(t,null,",")," ",u.createElement(Vo,{buttonSets:[],buttonsVisible:"never",value:this.props.rangeMax,onChange:this.change("rangeMax")}),u.createElement(t,null,"\\Large)")),u.createElement("div",{className:"perseus-widget-row"},u.createElement(e.ColorPicker,{value:this.props.color,onChange:this.change("color")})),u.createElement("div",{className:"perseus-widget-row"},u.createElement(e.DashPicker,{value:this.props.strokeDasharray,onChange:this.change("strokeDasharray")})),u.createElement("div",{className:"perseus-widget-row"},u.createElement("div",{className:"perseus-widget-left-col"},"Width:"," ",u.createElement(jo,{value:this.props.strokeWidth,placeholder:2,onChange:this.change("strokeWidth")}))))}}x(Zo,"propTypes",{...e.Changeable.propTypes,x:f.default.string,y:f.default.string,rangeMin:f.default.string,rangeMax:f.default.string,color:f.default.string,strokeDashArray:f.default.string,strokeWidth:f.default.number}),x(Zo,"defaultProps",{x:"cos(t)",y:"sin(t)",rangeMin:"0",rangeMax:"2\\pi",color:e.KhanColors.BLUE,strokeDasharray:"",strokeWidth:2});class Qo extends u.Component{constructor(){var t;super(...arguments),t=this,x(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),x(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){const{TeX:t}=$o();return u.createElement("div",{className:"graph-settings"},u.createElement("div",{className:"perseus-widget-row"},u.createElement(Bo,{value:this.props.label,onChange:this.change("label"),style:{width:"100%"}})),u.createElement("div",{className:"perseus-widget-row"},"Location: ",u.createElement(t,null,"\\Large("),u.createElement(Vo,{buttonSets:[],buttonsVisible:"never",value:this.props.coordX,onChange:this.change("coordX")}),u.createElement(t,null,",")," ",u.createElement(Vo,{buttonSets:[],buttonsVisible:"never",value:this.props.coordY,onChange:this.change("coordY")}),u.createElement(t,null,"\\Large)")),u.createElement("div",{className:"perseus-widget-row"},u.createElement(e.ColorPicker,{value:this.props.color,onChange:this.change("color")})))}}x(Qo,"propTypes",{...e.Changeable.propTypes,color:f.default.string,coordX:f.default.string,coordY:f.default.string,label:f.default.string}),x(Qo,"defaultProps",{coordX:"0",coordY:"0",color:e.KhanColors.BLACK,label:"\\phi"});class el extends u.Component{constructor(){var t;super(...arguments),t=this,x(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),x(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){const{TeX:t}=$o();return u.createElement("div",{className:"graph-settings"},u.createElement("div",{className:"perseus-widget-row"},"Bottom left: ",u.createElement(t,null,"\\Large("),u.createElement(Vo,{buttonSets:[],buttonsVisible:"never",value:this.props.coordX,onChange:this.change("coordX")}),u.createElement(t,null,",")," ",u.createElement(Vo,{buttonSets:[],buttonsVisible:"never",value:this.props.coordY,onChange:this.change("coordY")}),u.createElement(t,null,"\\Large)")),u.createElement("div",{className:"perseus-widget-row"},"Width:"," ",u.createElement(Vo,{buttonSets:[],buttonsVisible:"never",value:this.props.width,onChange:this.change("width")})),u.createElement("div",{className:"perseus-widget-row"},"Height:"," ",u.createElement(Vo,{buttonSets:[],buttonsVisible:"never",value:this.props.height,onChange:this.change("height")})),u.createElement("div",{className:"perseus-widget-row"},u.createElement(e.ColorPicker,{value:this.props.color,lightColors:!0,onChange:this.change("color")})),u.createElement("div",{className:"perseus-widget-row"},"You want a border? Sorry, draw your own."))}}x(el,"propTypes",{...e.Changeable.propTypes,color:f.default.string,coordX:f.default.string,coordY:f.default.string,height:f.default.string,width:f.default.string}),x(el,"defaultProps",{coordX:"-5",coordY:"5",width:"2",height:"3",color:e.KhanColors.LIGHT_BLUE});class tl extends u.Component{constructor(){var t;super(...arguments),t=this,x(this,"state",{usedVarSubscripts:this._getAllVarSubscripts(this.props.elements),usedFunctionNames:this._getAllFunctionNames(this.props.elements)}),x(this,"_updateGraphProps",(e=>{this.change({graph:m.default.extend(m.default.omit(e,"step"),{tickStep:e.step})})})),x(this,"_addNewElement",(e=>{const t=e.target.value;if(""===t)return;e.target.value="";const n={type:t,key:t+"-"+(16777215*Math.random()<<0).toString(16),options:"point"===t?m.default.clone(Go.defaultProps):"line"===t?m.default.clone(Yo.defaultProps):"movable-point"===t?m.default.clone(Ko.defaultProps):"movable-line"===t?m.default.clone(Jo.defaultProps):"function"===t?m.default.clone(Xo.defaultProps):"parametric"===t?m.default.clone(Zo.defaultProps):"label"===t?m.default.clone(Qo.defaultProps):"rectangle"===t?m.default.clone(el.defaultProps):{}};let r;if("movable-point"===t)r=m.default.max([m.default.max(this.state.usedVarSubscripts),-1])+1,n.options.varSubscript=r;else if("movable-line"===t)r=m.default.max([m.default.max(this.state.usedVarSubscripts),-1])+1,n.options.startSubscript=r,n.options.endSubscript=r+1;else if("function"===t){const e=String.fromCharCode(m.default.max([m.default.max(m.default.map(this.state.usedFunctionNames,(function(e){return e.charCodeAt(0)}))),"e".charCodeAt(0)])+1);n.options.funcName=e}this.change({elements:this.props.elements.concat(n)})})),x(this,"_deleteElement",(e=>{const t=this.props.elements[e];this.change({elements:m.default.without(this.props.elements,t)})})),x(this,"_moveElementUp",(e=>{const t=this.props.elements[e],n=m.default.without(this.props.elements,t);n.splice(e-1,0,t),this.change({elements:n})})),x(this,"_moveElementDown",(e=>{const t=this.props.elements[e],n=m.default.without(this.props.elements,t);n.splice(e+1,0,t),this.change({elements:n})})),x(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),x(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}UNSAFE_componentWillReceiveProps(e){this.setState({usedVarSubscripts:this._getAllVarSubscripts(e.elements),usedFunctionNames:this._getAllFunctionNames(e.elements)})}_getAllVarSubscripts(e){return m.default.map(m.default.where(e,{type:"movable-point"}),(e=>e.options.varSubscript)).concat(m.default.map(m.default.where(e,{type:"movable-line"}),(e=>e.options.startSubscript))).concat(m.default.map(m.default.where(e,{type:"movable-line"}),(e=>e.options.endSubscript)))}_getAllFunctionNames(e){return m.default.map(m.default.where(e,{type:"function"}),(e=>e.options.funcName))}render(){const{TeX:t}=$o();return u.createElement("div",{className:"perseus-widget-interaction-editor"},u.createElement(e.ElementContainer,{title:"Grid settings"},u.createElement(lo,{editableSettings:["canvas","graph"],box:this.props.graph.box,labels:this.props.graph.labels,range:this.props.graph.range,step:this.props.graph.tickStep,gridStep:this.props.graph.gridStep,markings:this.props.graph.markings,onChange:this._updateGraphProps}),!0!==this.props.graph.valid&&u.createElement("div",null,this.props.graph.valid)),m.default.map(this.props.elements,(function(n,r){return"movable-point"===n.type?u.createElement(e.ElementContainer,{title:u.createElement("span",null,"Movable point"," ",u.createElement(t,null,"(x_{"+n.options.varSubscript+"}, y_{"+n.options.varSubscript+"})")),onUp:0===r?null:this._moveElementUp.bind(this,r),onDown:r===this.props.elements.length-1?null:this._moveElementDown.bind(this,r),onDelete:this._deleteElement.bind(this,r),key:n.key},u.createElement(Ko,C({},n.options,{onChange:e=>{const t=JSON.parse(JSON.stringify(this.props.elements));m.default.extend(t[r].options,e),this.change({elements:t})}}))):"movable-line"===n.type?u.createElement(e.ElementContainer,{title:u.createElement("span",null,"Movable line"," ",u.createElement(t,null,"(x_{"+n.options.startSubscript+"}, y_{"+n.options.startSubscript+"})")," ","to"," ",u.createElement(t,null,"(x_{"+n.options.endSubscript+"}, y_{"+n.options.endSubscript+"})")),onUp:0===r?null:this._moveElementUp.bind(this,r),onDown:r===this.props.elements.length-1?null:this._moveElementDown.bind(this,r),onDelete:this._deleteElement.bind(this,r),key:n.key},u.createElement(Jo,C({},n.options,{onChange:e=>{const t=JSON.parse(JSON.stringify(this.props.elements));m.default.extend(t[r].options,e),this.change({elements:t})}}))):"point"===n.type?u.createElement(e.ElementContainer,{title:u.createElement("span",null,"Point"," ",u.createElement(t,null,"("+n.options.coordX+", "+n.options.coordY+")")),onUp:0===r?null:this._moveElementUp.bind(this,r),onDown:r===this.props.elements.length-1?null:this._moveElementDown.bind(this,r),onDelete:this._deleteElement.bind(this,r),key:n.key},u.createElement(Go,C({},n.options,{onChange:e=>{const t=JSON.parse(JSON.stringify(this.props.elements));m.default.extend(t[r].options,e),this.change({elements:t})}}))):"line"===n.type?u.createElement(e.ElementContainer,{title:u.createElement("span",null,"Line"," ",u.createElement(t,null,"("+n.options.startX+", "+n.options.startY+")")," ","to"," ",u.createElement(t,null,"("+n.options.endX+", "+n.options.endY+")")),onUp:0===r?null:this._moveElementUp.bind(this,r),onDown:r===this.props.elements.length-1?null:this._moveElementDown.bind(this,r),onDelete:this._deleteElement.bind(this,r),key:n.key},u.createElement(Yo,C({},n.options,{onChange:e=>{const t=JSON.parse(JSON.stringify(this.props.elements));m.default.extend(t[r].options,e),this.change({elements:t})}}))):"function"===n.type?u.createElement(e.ElementContainer,{title:u.createElement("span",null,"Function"," ",u.createElement(t,null,n.options.funcName+"(x) = "+n.options.value)),onUp:0===r?null:this._moveElementUp.bind(this,r),onDown:r===this.props.elements.length-1?null:this._moveElementDown.bind(this,r),onDelete:this._deleteElement,key:n.key},u.createElement(Xo,C({},n.options,{onChange:e=>{const t=JSON.parse(JSON.stringify(this.props.elements));m.default.extend(t[r].options,e),this.change({elements:t})}}))):"parametric"===n.type?u.createElement(e.ElementContainer,{title:u.createElement("span",null,"Parametric"),onUp:0===r?null:this._moveElementUp.bind(this,r),onDown:r===this.props.elements.length-1?null:this._moveElementDown.bind(this,r),onDelete:this._deleteElement,key:n.key},u.createElement(Zo,C({},n.options,{onChange:e=>{const t=JSON.parse(JSON.stringify(this.props.elements));m.default.extend(t[r].options,e),this.change({elements:t})}}))):"label"===n.type?u.createElement(e.ElementContainer,{title:u.createElement("span",null,"Label"," ",u.createElement(t,null,Ho(n.options.label))," "),onUp:0===r?null:this._moveElementUp.bind(this,r),onDown:r===this.props.elements.length-1?null:this._moveElementDown.bind(this,r),onDelete:this._deleteElement,key:n.key},u.createElement(Qo,C({},n.options,{onChange:e=>{const t=JSON.parse(JSON.stringify(this.props.elements));m.default.extend(t[r].options,e),this.change({elements:t})}}))):"rectangle"===n.type?u.createElement(e.ElementContainer,{title:u.createElement("span",null,"Rectangle"," ",u.createElement(t,null,"("+n.options.coordX+", "+n.options.coordY+")")," — ",u.createElement(t,null,n.options.width+" \\times "+n.options.height)),onUp:0===r?null:this._moveElementUp.bind(this,r),onDown:r===this.props.elements.length-1?null:this._moveElementDown.bind(this,r),onDelete:this._deleteElement,key:n.key},u.createElement(el,C({},n.options,{onChange:e=>{const t=JSON.parse(JSON.stringify(this.props.elements));m.default.extend(t[r].options,e),this.change({elements:t})}}))):void 0}),this),u.createElement("div",{className:"perseus-widget-interaction-editor-select-element"},u.createElement("select",{onChange:this._addNewElement},u.createElement("option",{value:""},"Add an element","…"),u.createElement("option",{disabled:!0},"--"),u.createElement("option",{value:"point"},"Point"),u.createElement("option",{value:"line"},"Line segment"),u.createElement("option",{value:"function"},"Function plot"),u.createElement("option",{value:"parametric"},"Parametric plot"),u.createElement("option",{value:"label"},"Label"),u.createElement("option",{value:"rectangle"},"Rectangle"),u.createElement("option",{value:"movable-point"},"★ Movable point"),u.createElement("option",{value:"movable-line"},"★ Movable line segment"))))}}x(tl,"propTypes",{...e.Changeable.propTypes,elements:f.default.arrayOf(f.default.object),graph:f.default.objectOf(f.default.any)}),x(tl,"widgetName","interaction"),x(tl,"defaultProps",{graph:{box:[400,400],labels:["x","y"],range:[[-10,10],[-10,10]],tickStep:[1,1],gridStep:[1,1],markings:"graph"},elements:[]});const{InfoTip:nl}=e.components,{containerSizeClass:rl,getInteractiveBoxFromSizeClass:sl}=e.SizingUtils,al=e.Util.DeprecationMixin,il=e.InteractiveGraphWidget.widget,ol={url:null},ll=g.default({displayName:"InteractiveGraphEditor",className:"perseus-widget-interactive-graph",statics:{widgetName:"interactive-graph"},getDefaultProps:function(){return{labels:["x","y"],range:[[-10,10],[-10,10]],step:[1,1],valid:!0,backgroundImage:ol,markings:"graph",showProtractor:!1,showRuler:!1,showTooltips:!1,rulerLabel:"",rulerTicks:10,correct:{type:"linear",coords:null}}},deprecatedProps:{showGraph:function(e){return{markings:e.showGraph?"graph":"none"}}},UNSAFE_componentWillMount(){al.UNSAFE_componentWillMount.call(this)},render:function(){let t,n;const r=this.props.gridStep||e.Util.getGridStep(this.props.range,this.props.step,e.interactiveSizes.defaultBoxSize),s=this.props.snapStep||e.Util.snapStepFromGridStep(r),a=rl.SMALL;if(!0===this.props.valid){const e={ref:"graph",box:this.props.box,range:this.props.range,labels:this.props.labels,step:this.props.step,gridStep:r,snapStep:s,graph:this.props.correct,backgroundImage:this.props.backgroundImage,markings:this.props.markings,showProtractor:this.props.showProtractor,showRuler:this.props.showRuler,rulerLabel:this.props.rulerLabel,rulerTicks:this.props.rulerTicks,trackInteraction:function(){},onChange:e=>{let t=this.props.correct;t=t.type===e.graph.type?m.default.extend({},t,e.graph):e.graph,this.props.onChange({correct:t})}};t=u.createElement(il,C({},e,{containerSizeClass:a,apiOptions:{...this.props.apiOptions,isMobile:!1}})),n=il.getEquationString(e)}else t=u.createElement("div",{className:"perseus-error"},this.props.valid);return u.createElement("div",{className:"perseus-widget-interactive-graph"},u.createElement("div",null,"Correct answer"," ",u.createElement(nl,null,u.createElement("p",null,"Graph the correct answer in the graph below and ensure the equation or point coordinates displayed represent the correct answer."))," ",": ",n),u.createElement(lo,{box:sl(a),range:this.props.range,labels:this.props.labels,step:this.props.step,gridStep:r,snapStep:s,valid:this.props.valid,backgroundImage:this.props.backgroundImage,markings:this.props.markings,showProtractor:this.props.showProtractor,showRuler:this.props.showRuler,showTooltips:this.props.showTooltips,rulerLabel:this.props.rulerLabel,rulerTicks:this.props.rulerTicks,onChange:this.props.onChange}),"polygon"===this.props.correct.type&&u.createElement("div",{className:"type-settings"},u.createElement("label",null," ","Student answer must"," ",u.createElement("select",{value:this.props.correct.match,onChange:this.changeMatchType},u.createElement("option",{value:"exact"},"match exactly"),u.createElement("option",{value:"congruent"},"be congruent"),u.createElement("option",{value:"approx"},"be approximately congruent"),u.createElement("option",{value:"similar"},"be similar"))),u.createElement(nl,null,u.createElement("ul",null,u.createElement("li",null,u.createElement("p",null,u.createElement("b",null,"Match Exactly:")," Match exactly in size, orientation, and location on the grid even if it is not shown in the background.")),u.createElement("li",null,u.createElement("p",null,u.createElement("b",null,"Be Congruent:")," Be congruent in size and shape, but can be located anywhere on the grid.")),u.createElement("li",null,u.createElement("p",null,u.createElement("b",null,"Be Approximately Congruent:")," Be exactly similar, and congruent in size and shape to within 0.1 units, but can be located anywhere on the grid."," ",u.createElement("em",null,"Use this with snapping to angle measure."))),u.createElement("li",null,u.createElement("p",null,u.createElement("b",null,"Be Similar:")," Be similar with matching interior angles, and side measures that are matching or a multiple of the correct side measures. The figure can be located anywhere on the grid."))))),"angle"===this.props.correct.type&&u.createElement("div",{className:"type-settings"},u.createElement("div",null,u.createElement("label",null," ","Student answer must"," ",u.createElement("select",{value:this.props.correct.match,onChange:this.changeMatchType},u.createElement("option",{value:"exact"},"match exactly"),u.createElement("option",{value:"congruent"},"be congruent"))),u.createElement(nl,null,u.createElement("p",null,"Congruency requires only that the angle measures are the same. An exact match implies congruency, but also requires that the angles have the same orientation and that the vertices are in the same position.")))),t)},changeMatchType:function(e){const t=m.default.extend({},this.props.correct,{match:e.target.value});this.props.onChange({correct:t})},serialize:function(){const e=m.default.pick(this.props,"step","backgroundImage","markings","labels","showProtractor","showRuler","showTooltips","rulerLabel","rulerTicks","range","gridStep","snapStep"),t=this.refs.graph;if(t){const n=t&&t.getUserInput();m.default.extend(e,{graph:{type:n.type},correct:n}),m.default.each(["allowReflexAngles","angleOffsetDeg","numPoints","numSides","numSegments","showAngles","showSides","snapTo","snapDegrees"],(function(t){m.default.has(n,t)&&(e.graph[t]=n[t])}))}return e}});class cl extends u.Component{constructor(){super(...arguments),x(this,"state",{focused:!1}),x(this,"handleBlur",(e=>{const{onBlur:t}=this.props;t&&t(e),this.setState({focused:!1})})),x(this,"handleFocus",(e=>{const{onFocus:t}=this.props;t&&t(e),this.setState({focused:!0})})),x(this,"disableDefault",(e=>{e.preventDefault()}))}render(){const{forwardedRef:e,width:t,grow:n,shrink:r,icon:s,backgroundColor:a,focusBorderColor:i,borderColor:l,color:c,onSubmit:p,leftSideIcon:h,id:d,testId:m,type:f,labelMediumInputText:g,...v}=this.props,{focused:y}=this.state,b={},E=[pl.input,pl.container];t&&(b.width=t),n&&(b.flexGrow=!0===n?1:n),(r||0===r)&&(b.flexShrink=!0===r?0:r),a?b.backgroundColor=a:E.push(pl.defaultBackground),c&&(b.color=c);const w=y?i||nn.blue:l||nn.offBlack16;b.border="1px solid ".concat(w);const x=s&&u.createElement("span",{className:o.css(pl.icon)},s),S=g?pl.labelMediumInputBase:pl.inputBase;return u.createElement("form",{className:o.css(E),style:b,onSubmit:p||this.disableDefault},h&&x,u.createElement("input",C({},v,{onFocus:this.handleFocus,onBlur:this.handleBlur,type:f,className:o.css(S),ref:e,id:d,"data-test-id":m})),!h&&x)}}const pl=o.StyleSheet.create({inputBase:{background:"inherit",border:"none",...e.globalStyles.typography.bodyXsmall,outline:"none","::placeholder":{color:e.globalStyles.colors.gray41},width:"100%",color:"inherit",marginBottom:0,paddingLeft:0,boxShadow:"none",padding:0,margin:0},labelMediumInputBase:{background:"inherit",border:"none",outline:"none","::placeholder":{color:e.globalStyles.colors.gray41},width:"100%",fontWeight:"normal",fontFamily:"Lato, san-serif",fontSize:"16px",lineHeight:"20px"},input:{height:40,borderRadius:e.globalStyles.borderRadius,boxSizing:"border-box",padding:"8px 10px"},container:{display:"inline-flex",alignItems:"center",marginBottom:0},defaultBackground:{backgroundColor:e.globalStyles.colors.white},icon:{display:"flex",alignItems:"center",justifyContent:"center"}});var hl=u.forwardRef(((e,t)=>u.createElement(cl,C({},e,{forwardedRef:t}))));class ul extends u.Component{render(){const{children:e,className:t,highlighted:n,href:r,inlineStyles:s,referrer:a,style:i,target:l,testId:c,element:p,...h}=this.props,[d,m]=r?r.split("#"):["javascript:void(0)"];let f=d;a&&(f.indexOf("?")>-1?f+="&ref="+a:f+="?ref="+a),m&&(f+="#"+m);const g=[dl.link,n&&dl.highlighted];Array.isArray(i)?g.push(...i):g.push(i);const v=t?" "+t:"",y="a"===p?{href:f}:{to:f};let b=h.rel;return"_blank"!==l||b||(b="noopener noreferrer"),u.createElement(p,{"data-test-id":c,...h,...y,className:o.css(...g)+v,style:s,target:l,rel:b},e)}}x(ul,"defaultProps",{highlighted:!1,href:"javascript:void(0)",style:[],element:"a"});const dl=o.StyleSheet.create({link:{backgroundColor:"transparent",color:"inherit",textDecoration:"none",":hover":{textDecoration:"underline"}},highlighted:{textDecoration:"underline"}}),{colors:ml,typography:fl}=e.globalStyles,{Icon:gl}=e.components,vl={path:"M11 11V7a1 1 0 0 1 2 0v4h4a1 1 0 0 1 0 2h-4v4a1 1 0 0 1-2 0v-4H7a1 1 0 0 1 0-2h4zm1 13C5.373 24 0 18.627 0 12S5.373 0 12 0s12 5.373 12 12-5.373 12-12 12zm0-2c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10z",width:24,height:24},yl={path:"M12 24C5.373 24 0 18.627 0 12S5.373 0 12 0s12 5.373 12 12-5.373 12-12 12zm0-2c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10zm-5-9a1 1 0 0 1 0-2h10a1 1 0 0 1 0 2H7z",width:24,height:24},bl=()=>u.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16"},u.createElement("filter",{id:"draggable-grip-shadow",width:"112.5%",height:"116.7%",x:"-6.2%",y:"-8.3%",filterUnits:"objectBoundingBox"},u.createElement("feGaussianBlur",{in:"SourceAlpha",stdDeviation:".5",result:"shadowBlurInner"}),u.createElement("feOffset",{in:"shadowBlurInner",dy:"1",result:"shadowOffsetInner"}),u.createElement("feComposite",{in:"shadowOffsetInner",in2:"SourceAlpha",k2:"-1",k3:"1",operator:"arithmetic",result:"shadowInnerInner"}),u.createElement("feColorMatrix",{in:"shadowInnerInner",values:"0 0 0 0 0.129411765 0 0 0 0 0.141176471 0 0 0 0 0.17254902 0 0 0 0.2 0"})),u.createElement("path",{d:"M1 4a1 1 0 1 1 0-2h14a1 1 0 0 1 0 2H1zm0 10a1 1 0 0 1 0-2h14a1 1 0 0 1 0 2H1zm0-5a1 1 0 1 1 0-2h14a1 1 0 0 1 0 2H1z",fill:ml.gray17,filter:"url(#draggable-grip-shadow)"})),El=e=>{let{onClick:t}=e;return u.createElement(ul,{className:o.css(Cl.addAnswer,Sl.addAnswer),onClick:t},u.createElement(gl,{icon:vl,size:24}),u.createElement("div",{className:o.css(Cl.spacer)}),"Add an answer choice")},wl=e=>{let{answer:t,onChange:n,onRemove:r}=e;return u.createElement("li",{className:o.css(Cl.answer)},u.createElement(ul,{onClick:r},u.createElement(gl,{icon:yl,size:24,color:"#D92916"})),u.createElement("div",{className:o.css(Cl.spacer)}),u.createElement(hl,{grow:1,onChange:e=>n(e.target.value),value:t}),u.createElement("div",{className:o.css(Cl.spacer)}),u.createElement(ul,{style:[Cl.disabled],title:"Answer reordering is not implemented."},u.createElement(bl,null)))},xl=e=>{let{choices:t,onChange:n}=e;return u.createElement("div",null,u.createElement("div",{className:o.css(Cl.title)},"Answer Choices"),u.createElement("ul",{className:o.css(Cl.answers)},t.map(((e,r)=>u.createElement(wl,{answer:e,key:r,onChange:e=>n([...t.slice(0,r),e,...t.slice(r+1)]),onRemove:()=>n([...t.slice(0,r),...t.slice(r+1)])})))),u.createElement(El,{onClick:()=>n([...t,""])}))},Cl=o.StyleSheet.create({title:{...fl.bodyXsmallBold,marginBottom:6,color:ml.gray17},answers:{marginTop:12,marginBottom:12},answer:{display:"flex",flexDirection:"row",alignItems:"center",":not(:first-child)":{marginTop:12}},addAnswer:{...fl.bodyXsmallBold,display:"flex",flexDirection:"row",alignItems:"center",color:"#1865f2"},spacer:{width:16},disabled:{cursor:"not-allowed"}}),Sl=o.StyleSheet.create({addAnswer:{":link":{color:"#1865f2"}}});class kl extends u.Component{constructor(e){super(e),x(this,"focusFlag",void 0),x(this,"waitingForClick",void 0),x(this,"handleClick",(e=>{this.props.disabled||(this.props.shouldUpdate()&&(this.waitingForClick=!1),this.props.onClick&&!this.props.disabled&&this.props.onClick(e))})),x(this,"handleMouseEnter",(()=>{this.props.disabled||!this.props.shouldUpdate()||this.waitingForClick||this.setState({hovered:!0})})),x(this,"handleMouseLeave",(()=>{this.props.disabled||!this.props.shouldUpdate()||this.waitingForClick||this.setState({hovered:!1})})),x(this,"handleTouchStart",(()=>{!this.props.disabled&&this.props.shouldUpdate()&&this.setState({hovered:!0})})),x(this,"handleTouchEnd",(()=>{!this.props.disabled&&this.props.shouldUpdate()&&(this.setState({hovered:!1}),this.waitingForClick=!0)})),x(this,"handleMouseDown",(()=>{!this.props.disabled&&this.props.shouldUpdate()&&(this.setState({focused:!1}),this.focusFlag=!0)})),x(this,"handleBlur",(()=>{!this.props.disabled&&this.props.shouldUpdate()&&this.setState({focused:!1})})),x(this,"handleFocus",(()=>{!this.props.disabled&&this.props.shouldUpdate()&&(this.focusFlag?this.focusFlag=!1:this.setState({focused:!0}))})),this.state={focused:!1,hovered:e.startHovered}}render(){const e={onBlur:this.handleBlur,onClick:this.handleClick,onFocus:this.handleFocus,onMouseDown:this.handleMouseDown,onMouseEnter:this.handleMouseEnter,onMouseLeave:this.handleMouseLeave,onTouchStart:this.handleTouchStart,onTouchEnd:this.handleTouchEnd},{children:t}=this.props;return(null==t?void 0:t(this.state,e))||null}}x(kl,"defaultProps",{startHovered:!1,shouldUpdate:()=>!0});const{borderRadius:Nl,colors:Tl}=e.globalStyles;class _l extends u.Component{render(){const{checked:e,disabled:t,appearDisabled:n,onChange:r,tabIndex:s,style:a,dataTestId:i,id:l}=this.props,c=Tl.gray41;return u.createElement(kl,null,((p,h)=>{let{focused:d}=p;return u.createElement("div",C({},h,{className:o.css(Dl.container,d&&Dl.focused),style:a,"data-test-id":i,"data-checked":e}),u.createElement("svg",{className:o.css(Dl.svg,(t||n)&&Dl.disabled),width:Pl,height:Pl,viewBox:"-".concat(Ml," -").concat(Ml,"\n ").concat(Pl," ").concat(Pl)},u.createElement("g",{fill:"none",fillRule:"evenodd"},e&&u.createElement("g",null,u.createElement("rect",{fill:c,width:Ol,height:Ol,x:"0",y:"0",rx:Nl}),u.createElement("path",{fill:Tl.white,stroke:Tl.white,d:"M4.98 7.41a0.58.58 0 1 0-0.81.81L6.47 10.53c0.23.23.59.23.81 0l4.55-4.55a0.58.58 0 0 0-0.81-0.81L6.88 9.31 4.98 7.41z"})),!e&&u.createElement("rect",{fill:Tl.white,stroke:Tl.gray68,width:Ol-2*Ml,height:Ol-2*Ml,x:Ml,y:Ml,rx:"4",strokeWidth:Al}))),u.createElement("input",{type:"checkbox",id:l,checked:e,className:o.css(Dl.checkbox,t&&Dl.defaultCursor),disabled:t,onChange:r,tabIndex:s}))}))}}x(_l,"defaultProps",{checked:!1,onChange:e=>{}});const Ol=16,Ml=.5,Al=1,Pl=Ol+2*Ml,Dl=o.StyleSheet.create({container:{position:"relative",display:"inline-block",verticalAlign:"middle",lineHeight:0,borderRadius:Nl,width:Pl,height:Pl,flexShrink:0},focused:{"::before":{content:'""',position:"absolute",top:-2,right:-2,bottom:-2,left:-2,borderRadius:Nl+2,backgroundColor:"lightblue"}},svg:{position:"absolute",left:0,top:0},checkbox:{appearance:"none",opacity:0,position:"absolute",top:Ml,width:Ol,height:Ol,margin:0,outline:"none",cursor:"pointer"},disabled:{opacity:.5},defaultCursor:{cursor:"default"}}),{colors:Il,typography:Rl}=e.globalStyles,zl=e=>{let{multipleAnswers:t,hideChoicesFromInstructions:n,onChange:r}=e;return u.createElement("div",null,u.createElement("div",{className:o.css(Ll.title)},"Behavior"),u.createElement("ul",null,u.createElement("li",{className:o.css(Ll.option)},u.createElement(_l,{checked:t,onChange:()=>r({multipleAnswers:!t})}),u.createElement("span",{className:o.css(Ll.label)},"Allow multiple answers per marker")),u.createElement("li",{className:o.css(Ll.option)},u.createElement(_l,{checked:n,onChange:()=>r({hideChoicesFromInstructions:!n})}),u.createElement("span",{className:o.css(Ll.label)},"Do not display answer choices in instructions"))))},Ll=o.StyleSheet.create({title:{...Rl.bodyXsmallBold,marginBottom:6,color:Il.gray17},option:{display:"flex",padding:"6px 0"},label:{...Rl.smallSubheadingMobile,marginLeft:16,color:Il.gray17}});const{Icon:Fl}=e.components,{colors:Ul}=e.globalStyles;class ql extends u.Component{constructor(){super(...arguments),x(this,"node",void 0)}handleKeyDown(e){const{onDropdownClose:t}=this.props,n=e.key,r=e.target;"ArrowDown"===n&&r.nextSibling&&(e.preventDefault(),r.nextSibling.focus()),"ArrowUp"===n&&r.previousSibling&&(e.preventDefault(),r.previousSibling.focus()),"ArrowUp"===n&&!r.previousSibling&&t&&(e.preventDefault(),t()),"Escape"!==n&&"Tab"!==n||!t||t()}render(){const{selected:e,value:t,onClick:n,children:r,optionRenderer:s,disabled:a,hideFocusState:i,testId:l,ariaLabel:c}=this.props;return u.createElement("button",{ref:e=>this.node=e,value:t,role:"menuitemradio","aria-checked":e,className:o.css(Vl.notAButton,a&&Vl.cursorDefault,i&&Vl.noFocus),onClick:e=>{!a&&n&&n(e)},onKeyDown:e=>this.handleKeyDown(e),"aria-disabled":a,"aria-label":c,"data-test-id":l},s&&s(u.createElement(u.Fragment,null,r),t||"",e||!1,a),!s&&u.createElement("span",{className:o.css(Vl.option,e&&Vl.optionSelected,a&&Vl.optionDisabled)},r,e&&u.createElement("span",{className:o.css(Vl.check)},u.createElement(Fl,{icon:"M10,3.8C10,4,9.9,4.2,9.8,4.3L5.1,8.9L4.3,9.8C4.2,9.9,4,10,3.8,10\n S3.5,9.9,3.4,9.8L2.5,8.9L0.2,6.6C0.1,6.5,0,6.3,0,6.2s0.1-0.3,0.2-0.4\n l0.9-0.9c0.1-0.1,0.3-0.2,0.4-0.2s0.3,0.1,0.4,0.2l1.9,1.9l4.2-4.2c0.1\n -0.1,0.3-0.2,0.4-0.2c0.2,0,0.3,0.1,0.4,0.2l0.9,0.9C9.9,3.5,10,3.7,\n 10,3.8z"}))))}}class Wl extends u.Component{constructor(){super(...arguments),x(this,"focusedElement",void 0)}componentDidMount(){this.focusedElement&&(e=>{const t=b.default.findDOMNode(e);t.focus&&t.focus({preventScroll:!0})})(this.focusedElement)}render(){const{children:e,onSelected:t,selectedValues:n,optionRenderer:r,noMargin:s,onDropdownClose:a,hideFocusState:i}=this.props;return u.createElement("div",{style:{top:top},className:o.css(Vl.optionGroup,s&&Vl.optionGroupNoMargin)},u.Children.map(e,((e,s)=>{const o=n.includes(e.props.value),l=o||0===s?e=>this.focusedElement=e:null;return u.cloneElement(e,{...e.props,key:s,selected:o,onClick:()=>t(e.props.value),optionRenderer:r,ref:l,onDropdownClose:a,hideFocusState:i})})))}}const Vl=o.StyleSheet.create({optionGroup:{margin:"4px 0"},optionGroupNoMargin:{margin:0},option:{display:"flex",flexDirection:"row",alignItems:"center",paddingLeft:32,paddingRight:32,height:30,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",color:Ul.gray17,userSelect:"none",":hover":{backgroundColor:Ul.gray95}},optionSelected:{backgroundColor:Ul.gray95,color:"#11ACCD"},optionDisabled:{color:Ul.gray76,":hover":{backgroundColor:"transparent"}},check:{position:"absolute",left:11},notAButton:{backgroundColor:"transparent",border:"none",display:"block",padding:0,margin:0,width:"100%",font:"inherit"},noFocus:{outline:"none"},cursorDefault:{cursor:"default"}}),{colors:jl,borderRadius:Bl}=e.globalStyles;class $l extends u.Component{constructor(e){super(e),x(this,"_marker",void 0),x(this,"handleClick",(e=>{const{showDropdown:t}=this.state;this._marker===e.target?this.setState({showDropdown:!t}):t&&this._marker&&!this._marker.contains(e.target)&&(e.stopPropagation(),this.setState({showDropdown:!1}))})),x(this,"handleLabelChange",(e=>{this.updateMarker({label:e.target.value})})),x(this,"handleSelectAnswer",(e=>{let{answers:t}=this.props;t=t.includes(e)?t.filter((t=>t!==e)):[...t,e],this.updateMarker({answers:t})})),this.state={showDropdown:!1}}componentDidMount(){document.addEventListener("click",this.handleClick,!0)}UNSAFE_componentWillReceiveProps(e){const{answers:t}=this.props,n=t.filter((t=>e.choices.includes(t)));JSON.stringify(t)!==JSON.stringify(n)&&setTimeout((()=>this.updateMarker({answers:n})))}componentWillUnmount(){document.removeEventListener("click",this.handleClick,!0)}openDropdown(){this.setState({showDropdown:!0})}updateMarker(e){const{answers:t,label:n,onChange:r,x:s,y:a}=this.props;r({answers:t,label:n,x:s,y:a,...e})}render(){const{answers:e,choices:t,label:n,onRemove:r,x:s,y:a}=this.props,{showDropdown:i}=this.state;return u.createElement("div",{className:o.css(Hl.marker,e.length>0&&Hl.markerWithAnswers,i&&Hl.markerSelected),ref:e=>this._marker=e,style:{left:"".concat(s,"%"),top:"".concat(a,"%")},title:"Click to select marker answers or to delete marker. Repositioning marker is not implemented."},i&&u.createElement("div",null,u.createElement("div",{className:o.css(Hl.dropdownBody,Hl.dropdownPositionWithArrow)},u.createElement(ql,{value:"",onClick:()=>r()},"Delete marker"),u.createElement("hr",{className:o.css(Hl.dividerHorizontal)}),u.createElement(Wl,{onSelected:this.handleSelectAnswer,selectedValues:e},t.map((e=>u.createElement(ql,{key:e,value:e},e)))),u.createElement("div",{className:o.css(Hl.labelContainer)},u.createElement(hl,{placeholder:"ARIA label (for screen readers)",onChange:this.handleLabelChange,value:n,width:"100%"})))))}}const Hl=o.StyleSheet.create({marker:{position:"absolute",boxSizing:"content-box",width:16,height:16,marginLeft:-8,marginTop:-8,cursor:"pointer",background:"linear-gradient(to bottom, rgba(33, 36, 44, 0.2), rgba(33, 36, 44, 0.5))",border:"solid 2px #ffffff",borderRadius:16,boxShadow:"0 2px 10px 0 rgba(33, 36, 44, 0.1)"},markerSelected:{width:28,height:28,marginLeft:-12,marginTop:-12,border:"none",borderRadius:28,"::before":{content:"''",display:"block",width:20,height:20,marginLeft:2,marginTop:2,border:"solid 2px #ffffff",borderRadius:20}},markerWithAnswers:{background:"#1865f2"},dropdownPositionWithArrow:{left:46,bottom:-12,"::before":{content:"''",display:"block",position:"absolute",width:0,height:0,left:-16,bottom:8,borderRight:"solid 16px ".concat(jl.gray98),borderTop:"solid 16px transparent",borderBottom:"solid 16px transparent"}},labelContainer:{padding:4},dividerHorizontal:{height:0,margin:0,border:"solid ".concat(jl.gray85),borderWidth:"0 0 1px",boxShadow:"none"},dropdownBody:{position:"absolute",border:"solid 1px rgba(0, 0, 0, 0.1)",zIndex:e.globalConstants.zindexDropdown,color:jl.gray17,backgroundColor:jl.gray98,borderRadius:Bl,maxHeight:320,cursor:"pointer"}}),{colors:Gl,typography:Yl}=e.globalStyles;class Kl extends u.Component{constructor(){super(...arguments),x(this,"_markers",[]),x(this,"handleImageDoubleClick",(e=>{e.preventDefault();const t=e.currentTarget.getBoundingClientRect(),n=Math.round((e.clientX-t.left)/t.width*1e3)/10,r=Math.round((e.clientY-t.top)/t.height*1e3)/10,{markers:s,onChange:a}=this.props;a([...s,{answers:[],label:"",x:n,y:r}])}))}openDropdownForMarkerIndices(e){e.forEach((e=>{this._markers[e]&&this._markers[e].openDropdown()}))}render(){const{choices:t,imageUrl:n,imageWidth:r,imageHeight:s,markers:a,onChange:i}=this.props,l=e.Dependencies.getDependencies().staticUrl;return u.createElement("div",null,u.createElement("div",{className:o.css(Jl.title)},"Markers"),u.createElement("div",{className:o.css(Jl.subtitle)},n?u.createElement("span",null,"Double-click on the image to add a marker.",u.createElement("br",null),u.createElement("br",null),"Markers are read by screen readers in the order that you add them here, so add in a logical order for the learner (e.g. sequentially, clockwise). You can test order by using keyboard tabbing."):"Upload an image to place markers."),n&&u.createElement("div",{className:o.css(Jl.markersCanvas),style:{maxWidth:r,maxHeight:s}},u.createElement("img",{alt:"",className:o.css(Jl.image),src:l(e.Util.getRealImageUrl(n)),onDoubleClick:this.handleImageDoubleClick}),a.map(((e,n)=>u.createElement($l,C({},e,{choices:t,key:"".concat(e.x,".").concat(e.y),onChange:e=>i([...a.slice(0,n),e,...a.slice(n+1)]),onRemove:()=>i([...a.slice(0,n),...a.slice(n+1)]),ref:e=>this._markers[n]=e}))))))}}const Jl=o.StyleSheet.create({title:{...Yl.bodyXsmallBold,marginBottom:6,color:Gl.gray17},subtitle:{...Yl.labelSmall,marginBottom:12,color:Gl.gray68},markersCanvas:{position:"relative",border:"solid 1px rgba(33, 36, 44, 0.16)"},image:{display:"block",maxWidth:"100%"}}),Xl="@media (max-width: 1023px)",Zl="@media (min-width: 1024px)",Ql={display:"block"},ec='Lato, "Noto Sans", sans-serif',tc=o.StyleSheet.create({Title:A({},Ql,{fontFamily:ec,fontWeight:900,[Zl]:{fontSize:36,lineHeight:"40px"},[Xl]:{fontSize:28,lineHeight:"32px"}}),Tagline:A({},Ql,{fontFamily:ec,fontWeight:400,fontSize:20,lineHeight:"24px"}),HeadingLarge:A({},Ql,{fontFamily:ec,fontWeight:700,[Zl]:{fontSize:28,lineHeight:"32px"},[Xl]:{fontSize:24,lineHeight:"28px"}}),HeadingMedium:A({},Ql,{fontFamily:ec,fontWeight:700,[Zl]:{fontSize:24,lineHeight:"28px"},[Xl]:{fontSize:22,lineHeight:"26px"}}),HeadingSmall:A({},Ql,{fontFamily:ec,fontWeight:700,fontSize:20,lineHeight:"24px"}),HeadingXSmall:A({},Ql,{fontFamily:ec,fontWeight:700,fontSize:12,lineHeight:"16px",letterSpacing:.6,textTransform:"uppercase"}),BodySerifBlock:A({},Ql,{fontFamily:'"Noto Serif", serif',fontWeight:400,fontSize:22,lineHeight:"28px"}),BodySerif:A({},Ql,{fontFamily:'"Noto Serif", serif',fontWeight:400,fontSize:18,lineHeight:"22px"}),BodyMonospace:A({},Ql,{fontFamily:"Inconsolata, monospace",fontWeight:400,fontSize:17,lineHeight:"22px"}),Body:A({},Ql,{fontFamily:ec,fontWeight:400,fontSize:16,lineHeight:"22px"}),LabelLarge:A({},Ql,{fontFamily:ec,fontWeight:700,fontSize:16,lineHeight:"20px"}),LabelMedium:A({},Ql,{fontFamily:ec,fontWeight:400,fontSize:16,lineHeight:"20px"}),LabelSmall:A({},Ql,{fontFamily:ec,fontWeight:400,fontSize:14,lineHeight:"18px"}),LabelXSmall:A({},Ql,{fontFamily:ec,fontWeight:400,fontSize:12,lineHeight:"16px"}),Caption:A({},Ql,{fontFamily:ec,fontWeight:400,fontSize:14,lineHeight:"20px"}),Footnote:A({},Ql,{fontFamily:ec,fontWeight:400,fontSize:12,lineHeight:"18px"})}),nc=["style","children"];class rc extends u.Component{render(){const e=this.props,{style:t,children:n}=e,r=M(e,nc);return u.createElement(Ot,A({},r,{style:[tc.Title,t]}),n)}}rc.defaultProps={tag:"h1"};const sc=["style","children"];class ac extends u.Component{render(){const e=this.props,{style:t,children:n}=e,r=M(e,sc);return u.createElement(Ot,A({},r,{style:[tc.HeadingLarge,t]}),n)}}ac.defaultProps={tag:"h2"};const ic=["style","children"];class oc extends u.Component{render(){const e=this.props,{style:t,children:n}=e,r=M(e,ic);return u.createElement(Ot,A({},r,{style:[tc.HeadingMedium,t]}),n)}}oc.defaultProps={tag:"h3"};const lc=["style","children"];class cc extends u.Component{render(){const e=this.props,{style:t,children:n}=e,r=M(e,lc);return u.createElement(Ot,A({},r,{style:[tc.HeadingSmall,t]}),n)}}cc.defaultProps={tag:"h4"};const pc=["style","children"];class hc extends u.Component{render(){const e=this.props,{style:t,children:n}=e,r=M(e,pc);return u.createElement(Ot,A({},r,{style:[tc.HeadingXSmall,t]}),n)}}hc.defaultProps={tag:"h4"};const uc=["style","children"];class dc extends u.Component{render(){const e=this.props,{style:t,children:n}=e,r=M(e,uc);return u.createElement(Ot,A({},r,{style:[tc.BodySerifBlock,t]}),n)}}dc.defaultProps={tag:"span"};const mc=["style","children"];class fc extends u.Component{render(){const e=this.props,{style:t,children:n}=e,r=M(e,mc);return u.createElement(Ot,A({},r,{style:[tc.BodySerif,t]}),n)}}fc.defaultProps={tag:"span"};const gc=["style","children"];class vc extends u.Component{render(){const e=this.props,{style:t,children:n}=e,r=M(e,gc);return u.createElement(Ot,A({},r,{style:[tc.BodyMonospace,t]}),n)}}vc.defaultProps={tag:"span"};const yc=["style","children"];class bc extends u.Component{render(){const e=this.props,{style:t,children:n}=e,r=M(e,yc);return u.createElement(Ot,A({},r,{style:[tc.Body,t]}),n)}}bc.defaultProps={tag:"span"};const Ec=["style","children"];class wc extends u.Component{render(){const e=this.props,{style:t,children:n}=e,r=M(e,Ec);return u.createElement(Ot,A({},r,{style:[tc.LabelLarge,t]}),n)}}wc.defaultProps={tag:"span"};const xc=["style","children"];class Cc extends u.Component{render(){const e=this.props,{style:t,children:n}=e,r=M(e,xc);return u.createElement(Ot,A({},r,{style:[tc.LabelMedium,t]}),n)}}Cc.defaultProps={tag:"span"};const Sc=["style","children"];class kc extends u.Component{render(){const e=this.props,{style:t,children:n}=e,r=M(e,Sc);return u.createElement(Ot,A({},r,{style:[tc.LabelSmall,t]}),n)}}kc.defaultProps={tag:"span"};const Nc=["style","children"];class Tc extends u.Component{render(){const e=this.props,{style:t,children:n}=e,r=M(e,Nc);return u.createElement(Ot,A({},r,{style:[tc.LabelXSmall,t]}),n)}}Tc.defaultProps={tag:"span"};const _c=["style","children"];class Oc extends u.Component{render(){const e=this.props,{style:t,children:n}=e,r=M(e,_c);return u.createElement(Ot,A({},r,{style:[tc.Tagline,t]}),n)}}Oc.defaultProps={tag:"span"};const Mc=["style","children"];class Ac extends u.Component{render(){const e=this.props,{style:t,children:n}=e,r=M(e,Mc);return u.createElement(Ot,A({},r,{style:[tc.Caption,t]}),n)}}Ac.defaultProps={tag:"span"};const Pc=["style","children"];class Dc extends u.Component{render(){const e=this.props,{style:t,children:n}=e,r=M(e,Pc);return u.createElement(Ot,A({},r,{style:[tc.Footnote,t]}),n)}}Dc.defaultProps={tag:"span"};const Ic={xsmall:16,small:24,medium:48,large:96},Rc={xsmall:"M7.237.741C7.165.393 6.95.154 6.656.053A1.01 1.01 0 0 0 6.18.01c-.053.009-.053.009-.087.017C2.553.949 0 4.214 0 7.91 0 12.36 3.598 16 8 16c4.4 0 8-3.647 8-8.112a1.02 1.02 0 0 0-.118-.423.877.877 0 0 0-.808-.48.909.909 0 0 0-.81.46c-.09.151-.13.296-.146.455-.08 3.493-2.737 6.207-6.118 6.207-3.41 0-6.118-2.74-6.118-6.196 0-2.843 1.936-5.291 4.644-6.022.1-.028.224-.082.352-.177a.928.928 0 0 0 .36-.97z",small:"M10.598.943c-.093-.449-.362-.748-.732-.875a1.314 1.314 0 0 0-.723-.033C3.83 1.417 0 6.317 0 11.864 0 18.538 5.398 24 12 24c6.598 0 12-5.471 12-12.16a1.333 1.333 0 0 0-.154-.548c-.193-.368-.544-.606-1.023-.606-.472 0-.825.229-1.035.585-.117.2-.169.39-.189.582-.124 5.472-4.294 9.73-9.599 9.73-5.349 0-9.599-4.3-9.599-9.72 0-4.46 3.036-8.299 7.28-9.444.127-.036.291-.107.458-.232.373-.28.57-.711.46-1.244z",medium:"M44.19 23.455a1.91 1.91 0 1 1 3.801 0h.003c.004.18.006.363.006.545 0 13.255-10.745 24-24 24S0 37.255 0 24 10.745 0 24 0c.182 0 .364.002.545.006V.01a1.91 1.91 0 1 1 0 3.801v.015A20.564 20.564 0 0 0 24 3.818C12.854 3.818 3.818 12.854 3.818 24c0 11.146 9.036 20.182 20.182 20.182 11.146 0 20.182-9.036 20.182-20.182 0-.182-.003-.364-.007-.545h.015z",large:"M88.38 46.91a3.818 3.818 0 1 1 7.602 0h.006c.008.362.012.725.012 1.09 0 26.51-21.49 48-48 48S0 74.51 0 48 21.49 0 48 0c.365 0 .728.004 1.09.012v.005a3.818 3.818 0 1 1 0 7.602v.032c-.362-.01-.725-.015-1.09-.015C25.708 7.636 7.636 25.708 7.636 48c0 22.292 18.072 40.364 40.364 40.364 22.292 0 40.364-18.072 40.364-40.364 0-.365-.005-.728-.015-1.09h.032z"},zc={light:nn.white,dark:nn.offBlack16},Lc=At("path");class Fc extends u.Component{render(){const{size:e,light:t,style:n}=this.props,r=Ic[e],s=Rc[e],a=t?zc.light:zc.dark,i=u.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:r,height:r,viewBox:`0 0 ${r} ${r}`},u.createElement(Lc,{style:[Uc.loadingSpinner,{fill:a}],fillRule:"nonzero",d:s}));return u.createElement(qt,{style:[Uc.spinnerContainer,n]},i)}}Fc.defaultProps={size:"large",light:!1};const Uc=o.StyleSheet.create({spinnerContainer:{justifyContent:"center"},loadingSpinner:{transformOrigin:"50% 50%",animationName:{"0%":{transform:"rotate(0deg)"},"50%":{transform:"rotate(180deg)"},"100%":{transform:"rotate(360deg)"}},animationDuration:"1.1s",animationIterationCount:"infinite",animationTimingFunction:"linear"}}),qc=e=>({small:16,medium:24,large:48,xlarge:96}[e]),Wc=["color","icon","size","style"],Vc=At("svg");class jc extends u.PureComponent{render(){const e=this.props,{color:t,icon:n,size:r,style:s}=e,a=M(e,Wc),{assetSize:i,path:o}=((e,t)=>{if(e[t])return{assetSize:t,path:e[t]};{const n=qc(t),r=Object.keys(e),s=e=>{const t=qc(e)-n;return t>0?Number.POSITIVE_INFINITY:Math.abs(t)},a=r.sort(((e,t)=>s(e)-s(t))),i=a[0];if(i&&e[i])return{assetSize:i,path:e[i]};throw new Error("Icon does not contain any valid asset sizes!")}})(n,r),l=qc(r),c=qc(i);return u.createElement(Vc,A({},a,{style:[Bc.svg,s],width:l,height:l,viewBox:`0 0 ${c} ${c}`}),u.createElement("path",{fill:t,d:o}))}}jc.defaultProps={color:"currentColor",size:"small"};const Bc=o.StyleSheet.create({svg:{display:"inline-block",verticalAlign:"text-bottom",flexShrink:0,flexGrow:0}}),$c=8,Hc=16,Gc=32,Yc=["children","skipClientNav","color","disabled","focused","hovered","href","kind","light","pressed","size","style","testId","type","spinner","icon","id","waiting"],Kc=At("a"),Jc=At("button"),Xc=At(vt);class Zc extends u.Component{renderInner(e){const t=this.props,{children:n,skipClientNav:r,color:s,disabled:a,focused:i,hovered:o,href:l,kind:c,light:p,pressed:h,size:d,style:m,testId:f,type:g,spinner:v,icon:y,id:b}=t,E=M(t,Yc),w=tp("destructive"===s?rn.controlDestructive:rn.controlDefault,c,p,y?8+("small"===d?16:24):0,d),x=v||a,C=A({"data-test-id":f,id:b,role:"button",style:[[Qc.shared,x&&Qc.disabled,y&&Qc.withIcon,w.default,x&&w.disabled,"tertiary"!==c&&!x&&(h?w.active:(o||i)&&w.focus),"small"===d&&Qc.small,"xlarge"===d&&Qc.xlarge],m]},E),S="small"===d?kc:wc,k=u.createElement(S,{style:[Qc.text,"xlarge"===d&&Qc.xlargeText,y&&Qc.textWithIcon,v&&Qc.hiddenText,"tertiary"===c&&Qc.textWithFocus,"tertiary"===c&&!x&&(h?w.active:(o||i)&&w.focus)]},y&&u.createElement(jc,{size:d,color:"currentColor",icon:y,style:Qc.icon}),n),N=u.createElement(u.Fragment,null,k,v&&u.createElement(Fc,{style:Qc.spinner,size:{medium:"small",small:"xsmall",xlarge:"medium"}[d],light:"primary"===c}));return l&&!x?e&&!r&&hn(l)?u.createElement(Xc,A({},C,{to:l}),N):u.createElement(Kc,A({},C,{href:l}),N):u.createElement(Jc,A({type:g||"button"},C,{"aria-disabled":x}),N)}render(){return u.createElement(je.Consumer,null,(e=>this.renderInner(e)))}}const Qc=o.StyleSheet.create({shared:{position:"relative",display:"inline-flex",alignItems:"center",justifyContent:"center",height:40,paddingTop:0,paddingBottom:0,paddingLeft:16,paddingRight:16,border:"none",borderRadius:4,cursor:"pointer",outline:"none",textDecoration:"none",boxSizing:"border-box",touchAction:"manipulation",userSelect:"none",":focus":{WebkitTapHighlightColor:"rgba(0,0,0,0)"}},withIcon:{paddingLeft:12},disabled:{cursor:"auto"},small:{height:32},xlarge:{height:60},text:{alignItems:"center",fontWeight:"bold",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",display:"inline-block",pointerEvents:"none"},xlargeText:{fontSize:18,lineHeight:"20px"},textWithIcon:{display:"flex"},textWithFocus:{position:"relative"},hiddenText:{visibility:"hidden"},spinner:{position:"absolute"},icon:{paddingRight:$c}}),ep={},tp=(e,t,n,r,s)=>{const a=e+t+n.toString()+r.toString()+s;if(ep[a])return ep[a];const{white:i,white50:l,white64:c,offBlack32:p,offBlack50:h,darkBlue:u}=nn,d=tn(en(e,.32),i),m=tn(p,e),f="xlarge"===s?Gc:Hc;let g={};if("primary"===t)g={default:{background:n?i:e,color:n?e:i,paddingLeft:f,paddingRight:f},focus:{boxShadow:`0 0 0 1px ${n?u:i}, 0 0 0 3px ${n?i:e}`},active:{boxShadow:`0 0 0 1px ${n?u:i}, 0 0 0 3px ${n?d:m}`,background:n?d:m,color:n?m:d},disabled:{background:n?d:p,color:n?e:c,cursor:"default",":focus":{boxShadow:`0 0 0 1px ${n?p:i}, 0 0 0 3px ${n?d:p}`}}};else if("secondary"===t)g={default:{background:"none",color:n?i:e,borderColor:n?l:h,borderStyle:"solid",borderWidth:1,paddingLeft:r?f-4:f,paddingRight:f},focus:{background:n?"transparent":i,borderColor:n?i:e,borderWidth:2,paddingLeft:r?f-5:f-1,paddingRight:f-1},active:{background:n?m:d,color:n?d:m,borderColor:n?d:m,borderWidth:2,paddingLeft:r?f-5:f-1,paddingRight:f-1},disabled:{color:n?l:p,borderColor:n?d:p,cursor:"default",":focus":{borderColor:n?l:p,borderWidth:2,paddingLeft:r?f-5:f-1,paddingRight:f-1}}};else{if("tertiary"!==t)throw new Error("Button kind not recognized");g={default:{background:"none",color:n?i:e,paddingLeft:0,paddingRight:0},focus:{":after":{content:"''",position:"absolute",height:2,width:`calc(100% - ${r}px)`,right:0,bottom:0,background:n?i:e,borderRadius:2}},active:{color:n?d:m,":after":{content:"''",position:"absolute",height:2,width:`calc(100% - ${r}px)`,right:0,bottom:"calc(50% - 11px)",background:n?d:m,borderRadius:2}},disabled:{color:n?d:p,cursor:"default"}}}return ep[a]=o.StyleSheet.create(g),ep[a]},np=["href","type","children","skipClientNav","spinner","disabled","onClick","beforeNav","safeWithNav","tabIndex","target","rel"],rp=["tabIndex"];class sp extends u.Component{renderClickableBehavior(e){const t=this.props,{href:n,type:r,children:s,skipClientNav:a,spinner:i,disabled:o,onClick:l,beforeNav:c,safeWithNav:p,tabIndex:h,target:d,rel:m}=t,f=M(t,np),g=dn(n,a,e),v=(e,t)=>{let{tabIndex:l}=t,c=M(t,rp);return u.createElement(Zc,A({},f,e,c,{disabled:o,spinner:i||e.waiting,skipClientNav:a,href:n,target:d,type:r,tabIndex:h||l}),s)};return c?u.createElement(g,{disabled:i||o,href:n,role:"button",type:r,onClick:l,beforeNav:c,safeWithNav:p,rel:m},v):u.createElement(g,{disabled:i||o,href:n,role:"button",type:r,onClick:l,safeWithNav:p,target:d,rel:m},v)}render(){return u.createElement(je.Consumer,null,(e=>this.renderClickableBehavior(e)))}}sp.defaultProps={color:"default",kind:"primary",light:!1,size:"medium",disabled:!1,spinner:!1};const{colors:ap,typography:ip}=e.globalStyles,op=e=>{let{onChange:t,url:n}=e;return u.createElement("div",null,u.createElement("div",{className:o.css(lp.title)},"Image"),u.createElement("div",{className:o.css(lp.components)},u.createElement(hl,{placeholder:"URL",grow:1,onChange:e=>t(e.target.value),value:n}),u.createElement("div",{className:o.css(lp.spacer)}),u.createElement(sp,{disabled:!n,"aria-label":n?"":"Not implemented. Use the 'Add Image' button in the editor to upload image, then copy the URL here.",onClick:()=>t(""),style:lp.btn},n?"Remove":"Upload")))},lp=o.StyleSheet.create({title:{...ip.bodyXsmallBold,marginBottom:6,color:ap.gray17},components:{display:"flex"},spacer:{width:16},btn:{minWidth:90}});class cp extends u.Component{constructor(){super(...arguments),x(this,"_questionMarkers",void 0),x(this,"getSaveWarnings",(()=>{const{choices:e,imageAlt:t,imageUrl:n,markers:r}=this.props,s=[];if(e.length<2&&s.push("Question requires at least two answer choices"),n?t||s.push("Question image has no alt text"):s.push("Image is not specified for question"),r.length){let e=0,t=0;for(const n of r)n.answers.length||e++,n.label||t++;e&&s.push("Question has ".concat(e," markers with no ")+"answers selected"),t&&s.push("Question has ".concat(t," markers with no ")+"ARIA label")}else s.push("Question has no markers, to label answers on image");return s})),x(this,"handleImageChange",(t=>{this.props.onChange({imageUrl:t,imageWidth:0,imageHeight:0}),t&&e.Util.getImageSize(t,((e,t)=>{this.props.onChange({imageWidth:e,imageHeight:t})}))})),x(this,"handleAltChange",(e=>{this.props.onChange({imageAlt:e})})),x(this,"handleChoicesChange",(e=>{this.props.onChange({choices:e})})),x(this,"handleMarkersChange",(e=>{this.props.onChange({markers:e})})),x(this,"handleBehaviorChange",(e=>{this.props.onChange(e)}))}componentDidUpdate(e){const t={};e.markers.forEach((e=>t["".concat(e.x,".").concat(e.y)]=e));const n=this.props.markers.map(((e,n)=>t.hasOwnProperty("".concat(e.x,".").concat(e.y))?-1:n)).filter((e=>-1!==e));n.length&&this._questionMarkers&&this._questionMarkers.openDropdownForMarkerIndices(n)}serialize(){return e.EditorJsonify.serialize.call(this)}render(){const{choices:e,imageAlt:t,imageUrl:n,imageWidth:r,imageHeight:s,markers:a,multipleAnswers:i,hideChoicesFromInstructions:l}=this.props,c=n&&r>0&&s>0;return u.createElement("div",null,u.createElement(op,{onChange:this.handleImageChange,url:n}),u.createElement("div",{className:o.css(pp.smallSpacer)}),c&&u.createElement(hl,{placeholder:"Alt text (for screen readers)",onChange:e=>this.handleAltChange(e.target.value),value:t,width:"100%"}),u.createElement("div",{className:o.css(pp.largeSpacer)}),u.createElement(Kl,{choices:e,imageUrl:c?n:"",imageWidth:r,imageHeight:s,markers:a,onChange:this.handleMarkersChange,ref:e=>this._questionMarkers=e}),u.createElement("div",{className:o.css(pp.largeSpacer)}),u.createElement(xl,{choices:e,onChange:this.handleChoicesChange}),u.createElement("div",{className:o.css(pp.largeSpacer)}),u.createElement(zl,{multipleAnswers:i,hideChoicesFromInstructions:l,onChange:this.handleBehaviorChange}))}}x(cp,"defaultProps",{choices:[],imageAlt:"",imageUrl:"",imageWidth:0,imageHeight:0,markers:[],multipleAnswers:!1,hideChoicesFromInstructions:!1}),x(cp,"widgetName","label-image");const pp=o.StyleSheet.create({largeSpacer:{height:32},smallSpacer:{height:16}}),{InfoTip:hp,NumberInput:up,PropCheckBox:dp}=e.components,mp={display:"table",tableLayout:"fixed"},fp={display:"table-row"},gp={display:"table-cell",padding:5},vp={borderRadius:10,cursor:"pointer"},yp={plus:()=>[[!1,!0,!1],[!0,!0,!0],[!1,!0,!1]],x:()=>[[!0,!1,!0],[!1,!0,!1],[!0,!1,!0]],"plus/x":e=>e%2?yp.x():yp.plus()},bp=function(e,t,n){return e=Math.floor(e),e=Math.max(e,t),e=Math.min(e,n)};class Ep extends u.Component{constructor(){super(...arguments),x(this,"_flip",(()=>{this.props.onChange(!this.props.value)}))}render(){const e=this.props.value?"#55dd55":"#115511",t=m.default.extend({},vp,{width:this.props.size,height:this.props.size,backgroundColor:e});return u.createElement("div",{style:t,onClick:this._flip})}}x(Ep,"propTypes",{value:f.default.bool.isRequired,size:f.default.number.isRequired});class wp extends u.Component{render(){return u.createElement("div",{style:mp,className:"no-select"},m.default.map(this.props.cells,((e,t)=>u.createElement("div",{key:t,style:fp},m.default.map(e,((e,n)=>u.createElement("div",{key:n,style:gp},u.createElement(Ep,{value:e,size:this.props.size,onChange:m.default.partial(this.props.onChange,t,n)}))))))))}}x(wp,"propTypes",{cells:f.default.arrayOf(f.default.arrayOf(f.default.bool)).isRequired,size:f.default.number.isRequired});class xp extends u.Component{constructor(){var t;super(...arguments),t=this,x(this,"_height",(()=>this.props.startCells.length)),x(this,"_width",(()=>0!==this.props.startCells.length?this.props.startCells[0].length:0)),x(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),x(this,"_handlePatternChange",(e=>{this.change("flipPattern",e.target.value)})),x(this,"_changeWidth",(e=>{e=bp(e,1,8),this._truncateCells(e,this._height())})),x(this,"_changeHeight",(e=>{e=bp(e,1,8),this._truncateCells(this._width(),e)})),x(this,"_truncateCells",((e,t)=>{const n=m.default.times(t,(t=>m.default.times(e,(e=>!(!this.props.startCells[t]||!this.props.startCells[t][e])))));this.change({startCells:n})})),x(this,"_switchTile",((e,t)=>{const n=(r=this.props.startCells,s=(n,r)=>n===e&&r===t,m.default.map(r,((e,t)=>m.default.map(e,((e,n)=>s(t,n)?!e:e)))));var r,s;this.change({startCells:n})})),x(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){return u.createElement("div",null,u.createElement("div",null,"Width:",u.createElement(up,{value:this._width(),placeholder:5,onChange:this._changeWidth}),", ","Height:",u.createElement(up,{value:this._height(),placeholder:5,onChange:this._changeHeight})),u.createElement("div",null,"Flip pattern:",u.createElement("select",{value:this.props.flipPattern,onChange:this._handlePatternChange},m.default.map(m.default.keys(yp),((e,t)=>u.createElement("option",{value:e,key:t},e))))),u.createElement("div",null,"Grade incomplete puzzles as wrong:"," ",u.createElement(dp,{gradeIncompleteAsWrong:this.props.gradeIncompleteAsWrong,onChange:this.props.onChange}),u.createElement(hp,null,"By default, incomplete puzzles are graded as empty.")),u.createElement("div",null,"Starting configuration:"),u.createElement("div",{style:{overflowX:"auto"}},u.createElement(wp,{cells:this.props.startCells,size:50,onChange:this._switchTile})))}}x(xp,"propTypes",{...e.Changeable.propTypes,startCells:f.default.arrayOf(f.default.arrayOf(f.default.bool)),flipPattern:f.default.string.isRequired,gradeIncompleteAsWrong:f.default.bool.isRequired}),x(xp,"widgetName","lights-puzzle"),x(xp,"defaultProps",{startCells:[[!1,!1,!1],[!1,!1,!1],[!1,!1,!1]],flipPattern:"plus",gradeIncompleteAsWrong:!1});const{InfoTip:Cp,PropCheckBox:Sp,TextListEditor:kp}=e.components;class Np extends u.Component{constructor(){super(...arguments),x(this,"onLabelChange",((e,t)=>{const n=m.default.clone(this.props.labels);n[e]=t.target.value,this.props.onChange({labels:n})})),x(this,"getSaveWarnings",(()=>this.props.left.length!==this.props.right.length?["The two halves of the matcher have different numbers of cards."]:[])),x(this,"serialize",(()=>m.default.pick(this.props,"left","right","labels","orderMatters","padding")))}render(){return u.createElement("div",{className:"perseus-matcher-editor"},u.createElement("div",null," ","Correct answer:"," ",u.createElement(Cp,null,u.createElement("p",null,"Enter the correct answers here. The preview on the right will show the cards in a randomized order, which is how the student will see them."))),u.createElement("div",{className:"perseus-clearfix"},u.createElement(kp,{options:this.props.left,onChange:(e,t)=>{this.props.onChange({left:e},t)},layout:"vertical"}),u.createElement(kp,{options:this.props.right,onChange:(e,t)=>{this.props.onChange({right:e},t)},layout:"vertical"})),u.createElement("span",null," ","Labels:"," ",u.createElement(Cp,null,u.createElement("p",null,"These are entirely optional."))),u.createElement("div",null,u.createElement("input",{type:"text",defaultValue:this.props.labels[0],onChange:this.onLabelChange.bind(this,0)}),u.createElement("input",{type:"text",defaultValue:this.props.labels[1],onChange:this.onLabelChange.bind(this,1)})),u.createElement("div",null,u.createElement(Sp,{label:"Order of the matched pairs matters:",orderMatters:this.props.orderMatters,onChange:this.props.onChange}),u.createElement(Cp,null,u.createElement("p",null,"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."),u.createElement("p",null,"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."))),u.createElement("div",null,u.createElement(Sp,{label:"Padding:",padding:this.props.padding,onChange:this.props.onChange}),u.createElement(Cp,null,u.createElement("p",null,"Padding is good for text, but not needed for images."))))}}x(Np,"propTypes",{left:f.default.array,right:f.default.array,labels:f.default.array,orderMatters:f.default.bool,padding:f.default.bool}),x(Np,"widgetName","matcher"),x(Np,"defaultProps",{left:["$x$","$y$","$z$"],right:["$1$","$2$","$3$"],labels:["test","label"],orderMatters:!1,padding:!0});const{RangeInput:Tp}=e.components,_p=e.MatrixWidget.widget;class Op extends u.Component{constructor(){var t;super(...arguments),t=this,x(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),x(this,"onMatrixBoardSizeChange",(e=>{const t=function(e){const t=[1,1];return m.default(e).each(((e,n)=>{let r=0;m.default(e).each(((e,t)=>{null!=e&&e.toString().length&&(r=t+1)})),t[1]=Math.max(t[1],r),r>0&&(t[0]=Math.max(t[0],n+1))})),t}(this.props.answers);if(null!==e[0]&&null!==e[1]){e=[Math.round(Math.min(Math.max(e[0],1),6)),Math.round(Math.min(Math.max(e[1],1),6))];const n=m.default(Math.min(e[0],t[0])).times((n=>m.default(Math.min(e[1],t[1])).times((e=>this.props.answers[n][e]))));this.props.onChange({matrixBoardSize:e,answers:n})}})),x(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){const e=m.default.extend({numericInput:!0,onBlur:()=>{},onFocus:()=>{},trackInteraction:()=>{}},this.props);return u.createElement("div",{className:"perseus-matrix-editor"},u.createElement("div",{className:"perseus-widget-row"}," ","Max matrix size:"," ",u.createElement(Tp,{value:this.props.matrixBoardSize,onChange:this.onMatrixBoardSizeChange,format:this.props.labelStyle,useArrowKeys:!0})),u.createElement("div",{className:"perseus-widget-row"},u.createElement(_p,e)),u.createElement("div",{className:"perseus-widget-row"}," ","Matrix prefix:"," ",u.createElement(Fn,{ref:"prefix",apiOptions:this.props.apiOptions,content:this.props.prefix,widgetEnabled:!1,onChange:e=>{this.change({prefix:e.content})}})),u.createElement("div",{className:"perseus-widget-row"}," ","Matrix suffix:"," ",u.createElement(Fn,{ref:"suffix",apiOptions:this.props.apiOptions,content:this.props.suffix,widgetEnabled:!1,onChange:e=>{this.change({suffix:e.content})}})))}}x(Op,"propTypes",{...e.Changeable.propTypes,matrixBoardSize:f.default.arrayOf(f.default.number).isRequired,answers:f.default.arrayOf(f.default.arrayOf(f.default.number)),prefix:f.default.string,suffix:f.default.string,cursorPosition:f.default.arrayOf(f.default.number)}),x(Op,"widgetName","matrix"),x(Op,"defaultProps",{matrixBoardSize:[3,3],answers:[[]],prefix:"",suffix:"",cursorPosition:[0,0]});const{InfoTip:Mp,NumberInput:Ap,PropCheckBox:Pp,RangeInput:Dp}=e.components,Ip={url:null,top:0,left:0};class Rp extends u.Component{constructor(){var t;super(...arguments),t=this,x(this,"className","perseus-widget-measurer"),x(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),x(this,"_changeUrl",(e=>{this._changeImage("url",e.target.value)})),x(this,"_changeTop",(e=>{this._changeImage("top",e)})),x(this,"_changeLeft",(e=>{this._changeImage("left",e)})),x(this,"_changeImage",((e,t)=>{const n=m.default.clone(this.props.image);n[e]=t,this.change("image",n)})),x(this,"renderLabelChoices",(e=>m.default.map(e,(function(e){const[t,n]=e;return u.createElement("option",{key:n,value:n},t)})))),x(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){const e=m.default.extend({},Ip,this.props.image);return u.createElement("div",{className:"perseus-widget-measurer"},u.createElement("div",null,"Image displayed under protractor and/or ruler:"),u.createElement("div",null,"URL:"," ",u.createElement("input",{type:"text",className:"perseus-widget-measurer-url",ref:"image-url",defaultValue:e.url,onChange:this._changeUrl}),u.createElement(Mp,null,u.createElement("p",null,'Create an image in graphie, or use the "Add image" function to create a background.'))),e.url&&u.createElement("div",{className:"perseus-widget-row"},u.createElement("label",{className:"perseus-widget-left-col"},"Pixels from top:"," ",u.createElement(Ap,{placeholder:0,onChange:this._changeTop,value:e.top,useArrowKeys:!0})),u.createElement("label",{className:"perseus-widget-right-col"},"Pixels from left:"," ",u.createElement(Ap,{placeholder:0,onChange:this._changeLeft,value:e.left,useArrowKeys:!0}))),u.createElement("div",null,"Containing area [width, height]:"," ",u.createElement(Dp,{onChange:this.change("box"),value:this.props.box,useArrowKeys:!0})),u.createElement("div",{className:"perseus-widget-row"},u.createElement("div",{className:"perseus-widget-left-col"},u.createElement(Pp,{label:"Show ruler",showRuler:this.props.showRuler,onChange:this.props.onChange})),u.createElement("div",{className:"perseus-widget-right-col"},u.createElement(Pp,{label:"Show protractor",showProtractor:this.props.showProtractor,onChange:this.props.onChange}))),this.props.showRuler&&u.createElement("div",null,u.createElement("div",null,u.createElement("label",null," ","Ruler label:"," ",u.createElement("select",{onChange:e=>this.change("rulerLabel",e.target.value),value:this.props.rulerLabel},u.createElement("option",{value:""},"None"),u.createElement("optgroup",{label:"Metric"},this.renderLabelChoices([["milimeters","mm"],["centimeters","cm"],["meters","m"],["kilometers","km"]])),u.createElement("optgroup",{label:"Imperial"},this.renderLabelChoices([["inches","in"],["feet","ft"],["yards","yd"],["miles","mi"]]))))),u.createElement("div",null,u.createElement("label",null," ","Ruler ticks:"," ",u.createElement("select",{onChange:e=>this.change("rulerTicks",+e.target.value),value:this.props.rulerTicks},m.default.map([1,2,4,8,10,16],(function(e){return u.createElement("option",{key:e,value:e},e)}))))),u.createElement("div",null,u.createElement("label",null,"Ruler pixels per unit:"," ",u.createElement(Ap,{placeholder:40,onChange:this.change("rulerPixels"),value:this.props.rulerPixels,useArrowKeys:!0}))),u.createElement("div",null,u.createElement("label",null,"Ruler length in units:"," ",u.createElement(Ap,{placeholder:10,onChange:this.change("rulerLength"),value:this.props.rulerLength,useArrowKeys:!0})))))}}x(Rp,"widgetName","measurer"),x(Rp,"propTypes",{...e.Changeable.propTypes,box:f.default.arrayOf(f.default.number),image:f.default.shape({url:f.default.string,top:f.default.number,left:f.default.number}),showProtractor:f.default.bool,showRuler:f.default.bool,rulerLabel:f.default.string,rulerTicks:f.default.number,rulerPixels:f.default.number,rulerLength:f.default.number}),x(Rp,"defaultProps",{box:[480,480],image:{},showProtractor:!0,showRuler:!1,rulerLabel:"",rulerTicks:10,rulerPixels:40,rulerLength:10});const{NumberInput:zp,TextInput:Lp}=e.components;class Fp extends u.Component{constructor(){var t;super(...arguments),t=this,x(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),x(this,"updateMolecule",(e=>{this.change({smiles:e})})),x(this,"updateRotation",(e=>{this.change({rotationAngle:e})})),x(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){return u.createElement("div",null,u.createElement("div",null,u.createElement("label",null,"SMILES: ",u.createElement(Lp,{onChange:this.updateMolecule,value:this.props.smiles}))),u.createElement("div",null,u.createElement("label",null,"Rotation (deg): ",u.createElement(zp,{onChange:this.updateRotation,value:this.props.rotationAngle}))))}}x(Fp,"propTypes",{...e.Changeable.propTypes,rotationAngle:f.default.number,smiles:f.default.string}),x(Fp,"widgetName","molecule-renderer");const{ButtonGroup:Up,InfoTip:qp,NumberInput:Wp,PropCheckBox:Vp,RangeInput:jp}=e.components;class Bp extends u.Component{constructor(){super(...arguments),x(this,"onRangeChange",(e=>{this.props.onChange({range:e})})),x(this,"onLabelRangeChange",((e,t)=>{let n=this.props.labelRange.slice();const r=n[1-e];null==t||null==r?n[e]=t:n=[Math.min(t,r),Math.max(t,r)],this.props.onChange({labelRange:n})})),x(this,"onDivisionRangeChange",(e=>{let t=this.props.numDivisions;t=((e,t,n)=>Math.min(Math.max(e,t),n))(t,e[0],e[1]),this.props.onChange({divisionRange:e,numDivisions:t})})),x(this,"onNumChange",((e,t)=>{const n={};n[e]=t,this.props.onChange(n)})),x(this,"onNumDivisionsChange",(e=>{const t=this.props.divisionRange.slice();(e=(e=m.default.isFinite(e)?Math.round(e):0)<0?-1*e:e)&&(e=Math.min(t[1],Math.max(t[0],e)),this.props.onChange({tickStep:null,divisionRange:t,numDivisions:e}))})),x(this,"onTickStepChange",(e=>{this.props.onChange({numDivisions:null,tickStep:e})})),x(this,"onChangeRelation",(e=>{const t=e.target.value;this.props.onChange({correctRel:t,isInequality:"eq"!==t})})),x(this,"onLabelStyleChange",(e=>{this.props.onChange({labelStyle:e})})),x(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){const e=this.props.range,t=this.props.labelRange,n=this.props.divisionRange;e[0]=+e[0],e[1]=+e[1];const r=e[1]-e[0],s=this.props.numDivisions,a=this.props.snapDivisions,i=this.props.tickStep,o=this.props.isTickCtrl;let l;l=o?null:i?i/a:r/s/a;return u.createElement("div",{className:"perseus-widget-number-line-editor"},u.createElement("div",{className:"perseus-widget-row"},"Correct x"," ",u.createElement("select",{value:this.props.correctRel,onChange:this.onChangeRelation},u.createElement("option",{value:"eq"}," = "),u.createElement("option",{value:"lt"}," < "),u.createElement("option",{value:"gt"}," > "),u.createElement("option",{value:"le"}," ≤ "),u.createElement("option",{value:"ge"}," ≥ "))," ",u.createElement(Wp,{value:this.props.correctX,format:this.props.labelStyle,onChange:this.onNumChange.bind(this,"correctX"),checkValidity:t=>t>=e[0]&&t<=e[1]&&(!l||ra.isInteger((t-e[0])/l)),placeholder:"answer",size:"normal",useArrowKeys:!0}),u.createElement(qp,null,u.createElement("p",null,"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 (=, <, >, ≤, ≥)."))),u.createElement("div",{className:"perseus-widget-row"},this.props.static?u.createElement("label",null,"Range:"):u.createElement("label",null,"Position:"," ",u.createElement(Wp,{value:this.props.initialX,format:this.props.labelStyle,onChange:this.onNumChange.bind(this,"initialX"),placeholder:e[0],checkValidity:t=>t>=e[0]&&t<=e[1],useArrowKeys:!0})," ∈ "),u.createElement(jp,{value:e,onChange:this.onRangeChange,format:this.props.labelStyle,useArrowKeys:!0}),u.createElement(qp,null,u.createElement("p",null,"This controls the initial position of the point along the number line and the",u.createElement("strong",null,"range"),", the position of the endpoints of the number line. Setting the range constrains the position of the answer and the labels."),u.createElement("p",null,"In static mode, the initial position of the point is determined by Correct x instead of position."))),u.createElement("div",{className:"perseus-widget-row"},u.createElement("div",{className:"perseus-widget-left-col"},"Labels:"," ",u.createElement(Wp,{value:t[0],placeholder:e[0],format:this.props.labelStyle,checkValidity:t=>t>=e[0]&&t<=e[1],onChange:this.onLabelRangeChange.bind(this,0),useArrowKeys:!0}),u.createElement("span",null," & "),u.createElement(Wp,{value:t[1],placeholder:e[1],format:this.props.labelStyle,checkValidity:t=>t>=e[0]&&t<=e[1],onChange:this.onLabelRangeChange.bind(this,1),useArrowKeys:!0}),u.createElement(qp,null,u.createElement("p",null,"This controls the position of the left / right labels. By default, the labels are set by the range ",u.createElement("br",null),u.createElement("strong",null,"Note:")," Ensure that the labels line up with the tick marks, or it may be confusing for users.")))),u.createElement("div",{className:"perseus-widget-row"},"Style:"," ",u.createElement(Up,{allowEmpty:!1,value:this.props.labelStyle,buttons:[{value:"decimal",content:"0.75",title:"Decimals"},{value:"improper",content:"⁷⁄₄",title:"Improper fractions"},{value:"mixed",content:"1¾",title:"Mixed numbers"},{value:"non-reduced",content:"⁸⁄₄",title:"Non-reduced"}],onChange:this.onLabelStyleChange}),u.createElement(qp,null,u.createElement("p",null,"This controls the styling of the labels for the two main labels as well as all the tick mark labels, if applicable. Your choices are decimal, improper fractions, mixed fractions, and non-reduced fractions."))),u.createElement("div",{className:"perseus-widget-row"},!this.props.static&&u.createElement("div",{className:"perseus-widget-left-col"},u.createElement(Vp,{label:"Show tick controller",isTickCtrl:this.props.isTickCtrl,onChange:this.props.onChange})),u.createElement("div",{className:"perseus-widget-right-col"},u.createElement(Vp,{label:"Show label ticks",labelTicks:this.props.labelTicks,onChange:this.props.onChange}))),u.createElement("div",{className:"perseus-widget-row"},!this.props.static&&u.createElement(Vp,{label:"Show tooltips",showTooltips:this.props.showTooltips,onChange:this.props.onChange})),u.createElement("div",{className:"perseus-widget-row"},o&&u.createElement("span",null,u.createElement("label",null,"Start num divisions at"," ",u.createElement(Wp,{value:this.props.numDivisions||null,format:"decimal",onChange:this.onNumDivisionsChange,checkValidity:e=>e>=n[0]&&e<=n[1],placeholder:r/this.props.tickStep,useArrowKeys:!0})),u.createElement(qp,null,u.createElement("p",null,"This controls the number (and position) of the tick marks. The number of divisions is constrained to"," "+n[0]+"–"+n[1],".",u.createElement("br",null),u.createElement("strong",null,"Note:")," The user will be able to specify the number of divisions in a number input."))),!o&&u.createElement("span",null,u.createElement("label",null,"Num divisions:"," ",u.createElement(Wp,{value:this.props.numDivisions||null,format:"decimal",onChange:this.onNumDivisionsChange,checkValidity:e=>e>=n[0]&&e<=n[1],placeholder:r/this.props.tickStep,useArrowKeys:!0}))," ",u.createElement("label",null,"or tick step:"," ",u.createElement(Wp,{value:this.props.tickStep||null,format:this.props.labelStyle,onChange:this.onTickStepChange,checkValidity:e=>e>0&&e<=r,placeholder:r/this.props.numDivisions,useArrowKeys:!0})),u.createElement(qp,null,u.createElement("p",null,"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."," ",u.createElement("br",null),u.createElement("strong",null,"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.")))),u.createElement("div",{className:"perseus-widget-row"},u.createElement("label",null,"Snap increments per tick:"," ",u.createElement(Wp,{value:a,checkValidity:e=>e>0,format:this.props.labelStyle,onChange:this.onNumChange.bind(this,"snapDivisions"),useArrowKeys:!0})),u.createElement(qp,null,u.createElement("p",null,"This determines the number of different places the point will snap between two adjacent tick marks."," ",u.createElement("br",null),u.createElement("strong",null,"Note:"),"Ensure the required number of snap increments is provided to answer the question."))))}}x(Bp,"propTypes",{range:f.default.arrayOf(f.default.number).isRequired,labelRange:f.default.arrayOf(f.default.number).isRequired,labelStyle:f.default.string.isRequired,labelTicks:f.default.bool,divisionRange:f.default.arrayOf(f.default.number).isRequired,numDivisions:f.default.number.isRequired,snapDivisions:f.default.number,tickStep:f.default.number,correctRel:f.default.oneOf(["lt","gt","le","ge","eq"]),correctX:f.default.number,initialX:f.default.number,isTickCtrl:f.default.bool,onChange:f.default.func.isRequired,static:f.default.bool,showTooltips:f.default.bool}),x(Bp,"widgetName","number-line"),x(Bp,"defaultProps",{range:[0,10],labelRange:[null,null],labelStyle:"decimal",labelTicks:!0,divisionRange:[1,12],numDivisions:5,snapDivisions:2,tickStep:null,correctRel:"eq",correctX:null,initialX:null,showTooltips:!1});const{ButtonGroup:$p,InfoTip:Hp,InlineIcon:Gp,MultiButtonGroup:Yp,NumberInput:Kp,PropCheckBox:Jp,TextInput:Xp}=e.components,{iconGear:Zp,iconTrash:Qp}=e.icons,{firstNumericalParse:eh}=e.Util,th=[{title:"Integers",value:"integer",content:"6"},{title:"Decimals",value:"decimal",content:"0.75"},{title:"Proper fractions",value:"proper",content:"⅗"},{title:"Improper fractions",value:"improper",content:"⁷⁄₄"},{title:"Mixed numbers",value:"mixed",content:"1¾"},{title:"Numbers with π",value:"pi",content:"π"}],nh=e=>({value:null,status:e,message:"",simplify:"required",answerForms:[],strict:!1,maxError:null}),rh=g.default({displayName:"NumericInputEditor",propTypes:{...e.Changeable.propTypes},statics:{widgetName:"numeric-input"},getDefaultProps:function(){return{answers:[nh("correct")],size:"normal",coefficient:!1,labelText:"",multipleNumberInput:!1,rightAlign:!1}},getInitialState:function(){return{lastStatus:"wrong",showOptions:m.default.map(this.props.answers,(()=>!1))}},render:function(){const e=this.props.answers,t=t=>u.createElement("div",{className:"perseus-widget-row"},u.createElement("label",null,"Unsimplified answers are"),u.createElement($p,{value:e[t].simplify,allowEmpty:!1,buttons:[{value:"required",content:"ungraded"},{value:"optional",content:"accepted"},{value:"enforced",content:"wrong"}],onChange:this.updateAnswer(t,"simplify")}),u.createElement(Hp,null,u.createElement("p",null,'Normally select "ungraded". This will give the user a message saying the answer is correct but not simplified. The user will then have to simplify it and re-enter, but will not be penalized. (5th grade and after)'),u.createElement("p",null,'Select "accepted" only if the user is not expected to know how to simplify fractions yet. (Anything prior to 5th grade)'),u.createElement("p",null,'Select "wrong" ',u.createElement("em",null,"only")," if we are specifically assessing the ability to simplify."))),n=t=>u.createElement("div",null,u.createElement("div",{className:"perseus-widget-row"},u.createElement("label",null,"Choose the suggested answer formats"),u.createElement(Yp,{buttons:th,values:e[t].answerForms,onChange:this.updateAnswer(t,"answerForms")}),u.createElement(Hp,null,u.createElement("p",null,'Formats will be autoselected for you based on the given answer; to show no suggested formats and accept all types, simply have a decimal/integer be the answer. Values with π will have format "pi", and values that are fractions will have some subset (mixed will be "mixed" and "proper"; improper/proper will both be "improper" and "proper"). If you would like to specify that it is only a proper fraction (or only a mixed/improper fraction), deselect the other format. Except for specific cases, you should not need to change the autoselected formats.'),u.createElement("p",null,"To restrict the answer to ",u.createElement("em",null,"only"),' an improper fraction (i.e. 7/4), select the improper fraction and toggle "strict" to true. This ',u.createElement("b",null,"will not")," ","accept 1.75 as an answer."," "),u.createElement("p",null,"Unless you are testing that specific skill, please do not restrict the answer format."))),u.createElement("div",{className:"perseus-widget-row"},u.createElement(Jp,{label:"Strictly match only these formats",strict:e[t].strict,onChange:this.updateAnswer.bind(this,t)}))),r=t=>u.createElement("div",{className:"perseus-widget-row"},u.createElement("label",null,"Max error"," ",u.createElement(Kp,{className:"max-error",value:e[t].maxError,onChange:this.updateAnswer(t,"maxError"),placeholder:"0"}))),s=u.createElement("div",{className:"perseus-widget-row"},u.createElement("label",null,"Width: "),u.createElement($p,{value:this.props.size,allowEmpty:!1,buttons:[{value:"normal",content:"Normal (80px)"},{value:"small",content:"Small (40px)"}],onChange:this.change("size")}),u.createElement(Hp,null,u.createElement("p",null,'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.'))),a=u.createElement("div",{className:"perseus-widget-row"},u.createElement(Jp,{label:"Right alignment",rightAlign:this.props.rightAlign,onChange:this.props.onChange})),i=u.createElement("div",{className:"perseus-widget-row"},u.createElement("label",null,"Label text:"," ",u.createElement(Xp,{value:this.props.labelText,onChange:this.change("labelText")})),u.createElement(Hp,null,u.createElement("p",null,"Text to describe this input. This will be shown to users using screenreaders."))),o=u.createElement("div",null,u.createElement("div",{className:"perseus-widget-row"},u.createElement(Jp,{label:"Coefficient",coefficient:this.props.coefficient,onChange:this.props.onChange}),u.createElement(Hp,null,u.createElement("p",null,"A coefficient style number allows the student to use - for -1 and an empty string to mean 1.")))),l=u.createElement("div",null,u.createElement("a",{href:"javascript:void(0)",className:"simple-button orange",onClick:()=>this.addAnswer(),onKeyDown:e=>this.onSpace(e,this.addAnswer)},u.createElement("span",null,"Add new answer"))),c={wrong:"(address the mistake/misconception)",ungraded:"(explain in detail to avoid confusion)",correct:"(reinforce the user's understanding)"};return u.createElement("div",{className:"perseus-input-number-editor"},u.createElement("div",{ref:e=>this.multInputOption=e},u.createElement("select",{onChange:this.onMultipleInputChange},u.createElement("option",{value:"simple-numeric-input"},"Ask for one correct solution"),u.createElement("option",{value:"multiple-numeric-input"},"Ask for all correct solutions"))),u.createElement("div",{className:"ui-title"},"User input"),u.createElement("div",{className:"msg-title"},"Message shown to user on attempt"),(()=>e.map(((s,a)=>{const i=u.createElement(Fn,{apiOptions:this.props.apiOptions,content:s.message||"",placeholder:"Why is this answer "+s.status+"?\t"+c[s.status],widgetEnabled:!1,onChange:e=>{"content"in e&&this.updateAnswer(a,{message:e.content})}});return u.createElement("div",{className:"perseus-widget-row",key:a},u.createElement("div",{className:"input-answer-editor-value-container"+(s.maxError?" with-max-error":"")},u.createElement(Kp,{value:s.value,className:"numeric-input-value",placeholder:"answer",format:m.default.last(s.answerForms),onFormatChange:(e,t)=>{let n;"pi"===t?n=["pi"]:"mixed"===t?n=["proper","mixed"]:"proper"!==t&&"improper"!==t||(n=["proper","improper"]),this.updateAnswer(a,{value:eh(e),answerForms:n})},onChange:e=>{this.updateAnswer(a,{value:eh(e)})}}),s.strict&&u.createElement("div",{className:"is-strict-indicator",title:"strictly equivalent to"},"≡"),"required"!==s.simplify&&"correct"===s.status&&u.createElement("div",{className:"simplify-indicator "+s.simplify,title:"accepts unsimplified answers"},"‰"),s.maxError?u.createElement("div",{className:"max-error-container"},u.createElement("div",{className:"max-error-plusmn"},"±"),u.createElement(Kp,{placeholder:0,value:e[a].maxError,format:m.default.last(s.answerForms),onChange:this.updateAnswer(a,"maxError")})):null,u.createElement("div",{className:"value-divider"}),u.createElement("a",{href:"javascript:void(0)",className:"answer-status "+s.status,onClick:()=>this.onStatusChange(a),onKeyDown:e=>this.onSpace(e,this.onStatusChange,a)},s.status),u.createElement("a",{href:"javascript:void(0)",className:"answer-trash",onClick:()=>this.onTrashAnswer(a),onKeyDown:e=>this.onSpace(e,this.onTrashAnswer,a)},u.createElement(Gp,Qp)),u.createElement("a",{href:"javascript:void(0)",className:"options-toggle",onClick:()=>this.onToggleOptions(a),onKeyDown:e=>this.onSpace(e,this.onToggleOptions,a)},u.createElement(Gp,Zp))),u.createElement("div",{className:"input-answer-editor-message"},i),this.state.showOptions[a]&&u.createElement("div",{className:"options-container"},r(a),"correct"===s.status&&t(a),n(a)))})))(),l,s,a,o,i)},change(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return e.Changeable.change.apply(this,n)},onToggleOptions:function(e){const t=this.state.showOptions.slice();t[e]=!t[e],this.setState({showOptions:t})},onTrashAnswer:function(e){if(e>=0&&e<this.props.answers.length){const t=this.props.answers.slice(0);t.splice(e,1),this.props.onChange({answers:t})}},onSpace:function(e,t){if(" "===e.key){e.preventDefault();const n=m.default.toArray(arguments).slice(2);t.apply(this,n)}},onStatusChange:function(e){const t=["wrong","ungraded","correct"],n=this.props.answers,r=t[(m.default.indexOf(t,n[e].status)+1)%t.length];this.updateAnswer(e,{status:r,simplify:"correct"===r?"required":"accepted"})},onMultipleInputChange:function(e){"multiple-numeric-input"===e.target.value?this.props.onChange({multipleNumberInput:!0}):this.props.onChange({multipleNumberInput:!1})},updateAnswer:function(e,t){if(!m.default.isObject(t))return m.default.partial(((e,t,n)=>{const r={};r[t]=n,this.updateAnswer(e,r)}),e,t);let n=m.default.clone(this.props.answers);if(e===n.length){const e=nh(this.state.lastStatus);n=n.concat(e)}n[e]=m.default.extend({},n[e],t),this.props.onChange({answers:n})},addAnswer:function(){const e=nh(this.state.lastStatus),t=this.props.answers.concat(e);this.props.onChange({answers:t})},getSaveWarnings:function(){const e=[];return m.default.contains(m.default.pluck(this.props.answers,"value"),"")&&e.push("One or more answers is empty"),this.props.answers.forEach(((t,n)=>{t.strict&&(!t.answerForms||0===t.answerForms.length)&&e.push("Answer ".concat(n+1," is set to string format ")+"matching, but no format was selected")})),e},serialize(){return e.EditorJsonify.serialize.call(this)}}),{InfoTip:sh,TextListEditor:ah}=e.components;class ih extends u.Component{constructor(){super(...arguments),x(this,"onOptionsChange",((e,t,n)=>{const r={};r[e]=m.default.map(t,(function(e){return{content:e}})),this.props.onChange(r,n)})),x(this,"onLayoutChange",(e=>{this.props.onChange({layout:e.target.value})})),x(this,"onHeightChange",(e=>{this.props.onChange({height:e.target.value})})),x(this,"serialize",(()=>({options:m.default.chain(m.default.pluck(this.props.correctOptions,"content")).union(m.default.pluck(this.props.otherOptions,"content")).uniq().reject((function(e){return""===e})).sort().sortBy((function(e){return/\d/.test(e)?0:/^\$?[a-zA-Z]+\$?$/.test(e)?2:1})).map((function(e){return{content:e}})).value(),correctOptions:this.props.correctOptions,otherOptions:this.props.otherOptions,height:this.props.height,layout:this.props.layout})))}render(){return u.createElement("div",{className:"perseus-widget-orderer"},u.createElement("div",null," ","Correct answer:"," ",u.createElement(sh,null,u.createElement("p",null,"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."))),u.createElement(ah,{options:m.default.pluck(this.props.correctOptions,"content"),onChange:this.onOptionsChange.bind(this,"correctOptions"),layout:this.props.layout}),u.createElement("div",null," ","Other cards:"," ",u.createElement(sh,null,u.createElement("p",null,"Create cards that are not part of the answer."))),u.createElement(ah,{options:m.default.pluck(this.props.otherOptions,"content"),onChange:this.onOptionsChange.bind(this,"otherOptions"),layout:this.props.layout}),u.createElement("div",null,u.createElement("label",null," ","Layout:"," ",u.createElement("select",{value:this.props.layout,onChange:this.onLayoutChange},u.createElement("option",{value:"horizontal"},"Horizontal"),u.createElement("option",{value:"vertical"},"Vertical"))),u.createElement(sh,null,u.createElement("p",null,"Use the horizontal layout for short text and small images. The vertical layout is best for longer text (e.g. proofs)."))),u.createElement("div",null,u.createElement("label",null," ","Height:"," ",u.createElement("select",{value:this.props.height,onChange:this.onHeightChange},u.createElement("option",{value:"normal"},"Normal"),u.createElement("option",{value:"auto"},"Automatic"))),u.createElement(sh,null,u.createElement("p",null,'Use "Normal" for text, "Automatic" for images.'))))}}x(ih,"propTypes",{correctOptions:f.default.array,otherOptions:f.default.array,height:f.default.oneOf(["normal","auto"]),layout:f.default.oneOf(["horizontal","vertical"]),onChange:f.default.func.isRequired}),x(ih,"widgetName","orderer"),x(ih,"defaultProps",{correctOptions:[{content:"$x$"}],otherOptions:[{content:"$y$"}],height:"normal",layout:"horizontal"});const{InfoTip:oh,PropCheckBox:lh}=e.components;class ch extends u.Component{constructor(){var t;super(...arguments),t=this,x(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),x(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){const e=u.createElement(Fn,{ref:"passage-editor",apiOptions:this.props.apiOptions,content:this.props.passageText,widgetEnabled:!1,placeholder:"Type passage here...",onChange:e=>{this.change({passageText:e.content})},showWordCount:!0}),t=u.createElement(Fn,{ref:"passage-footnotes-editor",apiOptions:this.props.apiOptions,content:this.props.footnotes,widgetEnabled:!1,placeholder:"Type footnotes here...",onChange:e=>{this.change({footnotes:e.content})}});return u.createElement("div",{className:"perseus-widget-passage-editor"},u.createElement("div",{className:"perseus-widget-row"},u.createElement(lh,{label:"Show line numbers",labelAlignment:"right",showLineNumbers:this.props.showLineNumbers,onChange:this.props.onChange})),u.createElement("div",null,"Passage title:",u.createElement(oh,null,u.createElement("p",null,"An optional title that will appear directly above the passage in the same font style. (E.g. Passage 1)")),u.createElement("div",null,u.createElement("input",{type:"text",defaultValue:this.props.passageTitle,onChange:e=>{this.change({passageTitle:e.target.value})}}))),u.createElement("div",null,"Passage Text:",e),u.createElement("div",null,"Footnotes:",u.createElement(oh,null,u.createElement("p",null,"To add footnotes, add ^ characters where they belong in the passage. Then, add ^ in the footnotes area to reference the footnotes in the passage.")),t))}}x(ch,"propTypes",{...e.Changeable.propTypes,passageTitle:f.default.string,passageText:f.default.string,footnotes:f.default.string,showLineNumbers:f.default.bool}),x(ch,"widgetName","passage"),x(ch,"defaultProps",{passageTitle:"",passageText:"",footnotes:"",showLineNumbers:!0});const{InfoTip:ph,NumberInput:hh,TextInput:uh}=e.components;class dh extends u.Component{constructor(){var t;super(...arguments),t=this,x(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),x(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){return u.createElement("div",null,u.createElement("div",null,u.createElement("label",null,"Passage Number: ",u.createElement(hh,{value:this.props.passageNumber,onChange:this.change("passageNumber")}))),u.createElement("div",null,u.createElement("label",null,"Reference Number: ",u.createElement(hh,{value:this.props.referenceNumber,onChange:this.change("referenceNumber")}))),u.createElement("div",null,u.createElement("label",null,"Summary Text: ",u.createElement(uh,{value:this.props.summaryText,onChange:this.change("summaryText")}),u.createElement(ph,null,u.createElement("p",null,"Short summary of the referenced section. This will be included in parentheses and quotes automatically."),u.createElement("p",null,"Ex: The start ... the end")))))}}x(dh,"propTypes",{...e.Changeable.propTypes,passageNumber:f.default.number,referenceNumber:f.default.number,summaryText:f.default.string}),x(dh,"widgetName","passage-ref"),x(dh,"defaultProps",{passageNumber:1,referenceNumber:1,summaryText:""});class mh extends u.Component{constructor(){var t;super(...arguments),t=this,x(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),x(this,"handleContentChange",(e=>{this.change({content:e.target.value})})),x(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){return u.createElement("div",null,"Content:",u.createElement("input",{type:"text",value:this.props.content,onChange:this.handleContentChange}))}}x(mh,"propTypes",{...e.Changeable.propTypes,content:f.default.string}),x(mh,"widgetName","passage-ref-target"),x(mh,"defaultProps",{content:""});const{InfoTip:fh,NumberInput:gh,RangeInput:vh,TextListEditor:yh}=e.components,bh=e.PlotterWidget.widget;function Eh(e,t,n){const r=m.default.clone(e);r.length=t;for(let s=e.length;s<t;s++)r[s]=n;return r}const wh={scaleY:1,maxY:10,snapsPerLine:2},xh={type:f.default.oneOf(["bar","line","pic","histogram","dotplot"]),labels:f.default.arrayOf(f.default.string),categories:f.default.arrayOf(f.default.oneOfType([f.default.number,f.default.string])),scaleY:f.default.number,maxY:f.default.number,snapsPerLine:f.default.number,picSize:f.default.number,pixBoxHeight:f.default.number,picUrl:f.default.string,plotDimensions:f.default.arrayOf(f.default.number),labelInterval:f.default.number,starting:f.default.arrayOf(f.default.number),correct:f.default.arrayOf(f.default.number),static:f.default.bool,onChange:f.default.func},Ch=e=>"$"+ra.round(e,2)+"$";class Sh extends u.Component{constructor(){super(...arguments),x(this,"state",{editing:this.props.static?"starting":"correct",pic:null,loadedUrl:null,minX:null,maxX:null,tickStep:null}),x(this,"fetchPic",(e=>{if(this.state.loadedUrl!==e){const t=new Image;t.src=e,t.onload=()=>{this.setState({pic:t,loadedUrl:e})}}})),x(this,"handleChangeTickStep",(e=>{this.setState({tickStep:e})})),x(this,"handleChangeRange",(e=>{this.setState({minX:e[0],maxX:e[1]})})),x(this,"changeLabelInterval",(e=>{this.props.onChange({labelInterval:e})})),x(this,"handlePlotterChange",(e=>{const t={};t[this.state.editing]=e.values,this.props.onChange(t)})),x(this,"changeType",(e=>{let t;if("histogram"===e?(t=[Ch(0)].concat(this.props.categories),this.props.onChange({type:e,categories:t})):"histogram"===this.props.type?(t=this.props.categories.slice(1),this.props.onChange({type:e,categories:t})):this.props.onChange({type:e}),t){b.default.findDOMNode(this.refs.categories).value=t.join(", ")}})),x(this,"changeLabel",((e,t)=>{const n=m.default.clone(this.props.labels);n[e]=t.target.value,this.props.onChange({labels:n})})),x(this,"changePicUrl",(t=>{const n=e.Util.getRealImageUrl(t);this.props.onChange({picUrl:n})})),x(this,"changeCategories",(e=>{let t=e.length;"histogram"===this.props.type&&t--;const n=this.props.scaleY;this.props.onChange({categories:e,correct:Eh(this.props.correct,t,n),starting:Eh(this.props.starting,t,n)})})),x(this,"changeScale",(e=>{const t=this.props.scaleY,n=+e.target.value||wh.scaleY,r=function(e){return e*n/t},s=r(this.props.maxY);this.props.onChange({scaleY:n,maxY:s,correct:m.default.map(this.props.correct,r),starting:m.default.map(this.props.starting,r)}),b.default.findDOMNode(this.refs.maxY).value=s})),x(this,"changeMax",(e=>{this.props.onChange({maxY:+e.target.value||wh.maxY})})),x(this,"changeSnaps",(e=>{this.props.onChange({snapsPerLine:+e.target.value||wh.snapsPerLine})})),x(this,"changeEditing",(e=>{this.setState({editing:e})})),x(this,"setCategoriesFromScale",(()=>{const e=this.state.tickStep||1,t=this.state.minX||0,n=this.state.maxX||0,r=Math.floor((n-t)/e)*e;let s;s="histogram"===this.props.type||"dotplot"===this.props.type?m.default.range(0,r+e,e):m.default.range(e,r+e,e),s=m.default.map(s,(e=>e+t)),s=m.default.map(s,Ch),this.changeCategories(s);b.default.findDOMNode(this.refs.categories).value=s.join(", ")})),x(this,"serialize",(()=>{const e=m.default.pick(this.props,"correct","starting","type","labels","categories","scaleY","maxY","snapsPerLine","labelInterval");return"pic"===this.props.type&&(e.picUrl=this.props.picUrl),e}))}UNSAFE_componentWillMount(){this.fetchPic(this.props.picUrl)}UNSAFE_componentWillReceiveProps(e){this.fetchPic(e.picUrl),e.static&&this.setState({editing:"starting"})}render(){const e=m.default.contains(["line","histogram","dotplot"],this.props.type),t=!m.default.contains(["pic","dotplot"],this.props.type),n={trackInteraction:()=>{},...this.props};return u.createElement("div",{className:"perseus-widget-plotter-editor"},u.createElement("div",null,"Chart type:"," ",m.default.map(["bar","line","pic","histogram","dotplot"],(function(e){return u.createElement("label",{key:e},u.createElement("input",{type:"radio",name:"chart-type",checked:this.props.type===e,onChange:m.default.partial(this.changeType,e)}),e)}),this)),u.createElement("div",null,"Labels:"," ",m.default.map(["x","y"],(function(e,t){return u.createElement("label",{key:e},e+":",u.createElement("input",{type:"text",onChange:m.default.partial(this.changeLabel,t),defaultValue:this.props.labels[t]}))}),this)),e&&u.createElement("div",{className:"set-from-scale-box"},u.createElement("span",{className:"categories-title"},"Set Categories From Scale"),u.createElement("div",null,u.createElement("label",null,"Tick Step:"," ",u.createElement(gh,{placeholder:1,useArrowKeys:!0,value:this.state.tickStep,onChange:this.handleChangeTickStep})),u.createElement(fh,null,u.createElement("p",null,"The difference between adjacent ticks."))),u.createElement("div",null,u.createElement("label",null,"Range:"," ",u.createElement(vh,{placeholder:[0,10],useArrowKeys:!0,value:[this.state.minX,this.state.maxX],onChange:this.handleChangeRange}))),u.createElement("div",null,u.createElement("button",{onClick:this.setCategoriesFromScale},"Set Categories"," "))),u.createElement("div",null,u.createElement("label",null,"Label Interval:"," ",u.createElement(gh,{useArrowKeys:!0,value:this.props.labelInterval,onChange:this.changeLabelInterval})),u.createElement(fh,null,u.createElement("p",null,'Which ticks to display the labels for. For instance, setting this to "4" will only show every 4th label (plus the last one)'))),"pic"===this.props.type&&u.createElement("div",null,u.createElement("label",null,"Picture:"," ",u.createElement(zs,{className:"pic-url",value:this.props.picUrl,onChange:this.changePicUrl}),u.createElement(fh,null,u.createElement("p",null,'Use the default picture of Earth, or insert the URL for a different picture using the "Add image" function.'))),this.state.pic&&this.state.pic.width!==this.state.pic.height&&u.createElement("p",{className:"warning"},u.createElement("b",null,"Warning"),": You are using a picture which is not square. This means the image will get distorted. You should probably crop it to be square.")),u.createElement("div",null,u.createElement("label",null,"Categories:"," ",u.createElement(yh,{ref:"categories",layout:"horizontal",options:this.props.categories,onChange:this.changeCategories}))),u.createElement("div",null,u.createElement("label",null,"Scale (y):"," ",u.createElement("input",{type:"text",onChange:this.changeScale,defaultValue:this.props.scaleY}))),u.createElement("div",null,u.createElement("label",null,"Max y:"," ",u.createElement("input",{type:"text",ref:"maxY",onChange:this.changeMax,defaultValue:this.props.maxY}))),t&&u.createElement("div",null,u.createElement("label",null,"Snaps per line:"," ",u.createElement("input",{type:"text",onChange:this.changeSnaps,defaultValue:this.props.snapsPerLine})),u.createElement(fh,null,u.createElement("p",null,"Creates the specified number of divisions between the horizontal lines. Fewer snaps between lines makes the graph easier for the student to create correctly."))),u.createElement("div",null,"Editing values:"," ",["correct","starting"].map((e=>u.createElement("label",{key:e},u.createElement("input",{type:"radio",disabled:"correct"===e&&this.props.static,checked:this.props.static?"starting"===e:this.state.editing===e,onChange:t=>this.changeEditing(e)}),e))),u.createElement(fh,null,u.createElement("p",null,"Use this toggle to switch between editing the correct answer (what the student will be graded on) and the starting values (what the student will see plotted when they start the problem). Note: These cannot be the same."),u.createElement("p",null,"In static mode, the starting values are rendered out to the displayed widget."))),u.createElement(bh,C({},n,{starting:this.props[this.state.editing],onChange:this.handlePlotterChange})))}}x(Sh,"propTypes",xh),x(Sh,"widgetName","plotter"),x(Sh,"defaultProps",{...wh,correct:[1],starting:[1],type:"bar",labels:["",""],categories:[""],picSize:30,picBoxHeight:36,plotDimensions:[275,200],labelInterval:1,get picUrl(){const t=e.Dependencies.getDependencies().staticUrl;return t?t("/images/badges/earth-small.png"):null}});const{InlineIcon:kh,PropCheckBox:Nh}=e.components,{iconPlus:Th,iconTrash:_h}=e.icons;class Oh extends u.Component{render(){const e=this.props.choice.correct?"correct":"incorrect";let t="Type a choice here...";this.props.choice.isNoneOfTheAbove&&(t=this.props.choice.correct?"Type the answer to reveal to the user...":"None of the above");const n=u.createElement(Fn,{ref:"content-editor",apiOptions:this.props.apiOptions,content:this.props.choice.content||"",widgetEnabled:!1,placeholder:t,disabled:this.props.choice.isNoneOfTheAbove&&!this.props.choice.correct,onChange:this.props.onContentChange}),r=u.createElement(Fn,{ref:"clue-editor",apiOptions:this.props.apiOptions,content:this.props.choice.clue||"",widgetEnabled:!1,placeholder:w._("Why is this choice %(correctOrIncorrect)s?",{correctOrIncorrect:e}),onChange:this.props.onClueChange}),s=u.createElement("a",{className:"simple-button orange delete-choice",href:"#",onClick:this.props.onDelete,title:"Remove this choice"},u.createElement(kh,_h));return u.createElement("div",{className:"choice-clue-editors"},u.createElement("div",{className:"choice-editor ".concat(e)},n),u.createElement("div",{className:"clue-editor"},r),this.props.showDelete&&s)}}x(Oh,"propTypes",{apiOptions:e.ApiOptions.propTypes,choice:f.default.object,showDelete:f.default.bool,onClueChange:f.default.func,onContentChange:f.default.func,onDelete:f.default.func});class Mh extends u.Component{constructor(){var t;super(...arguments),t=this,x(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),x(this,"onMultipleSelectChange",(e=>{e=e.multipleSelect;const t=m.default.reduce(this.props.choices,(function(e,t){return t.correct?e+1:e}),0);if(!e&&t>1){const t=m.default.map(this.props.choices,(function(e){return m.default.defaults({correct:!1},e)}));this.props.onChange({multipleSelect:e,choices:t})}else this.props.onChange({multipleSelect:e})})),x(this,"onCountChoicesChange",(e=>{e=e.countChoices,this.props.onChange({countChoices:e})})),x(this,"onChange",(e=>{let{checked:t}=e;const n=m.default.map(this.props.choices,((e,n)=>m.default.extend({},e,{correct:t[n],content:e.isNoneOfTheAbove&&!t[n]?"":e.content})));this.props.onChange({choices:n})})),x(this,"onContentChange",((e,t)=>{const n=this.props.choices.slice();n[e]=m.default.extend({},n[e],{content:t}),this.props.onChange({choices:n})})),x(this,"onClueChange",((e,t)=>{const n=this.props.choices.slice();n[e]=m.default.extend({},n[e],{clue:t}),""===t&&delete n[e].clue,this.props.onChange({choices:n})})),x(this,"onDelete",((e,t)=>{t.preventDefault();const n=this.props.choices.slice(),r=n[e];n.splice(e,1),this.props.onChange({choices:n,hasNoneOfTheAbove:this.props.hasNoneOfTheAbove&&!r.isNoneOfTheAbove})})),x(this,"addChoice",((e,t)=>{t.preventDefault();const n=this.props.choices.slice(),r={isNoneOfTheAbove:e},s=n.length-(this.props.hasNoneOfTheAbove?1:0);n.splice(s,0,r),this.props.onChange({choices:n,hasNoneOfTheAbove:e||this.props.hasNoneOfTheAbove},(()=>{this.refs["choice-editor".concat(s)].refs["content-editor"].focus()}))})),x(this,"setDisplayCount",(e=>{this.props.onChange({displayCount:e})})),x(this,"focus",(()=>(this.refs["choice-editor0"].refs["content-editor"].focus(),!0))),x(this,"getSaveWarnings",(()=>m.default.some(m.default.pluck(this.props.choices,"correct"))?[]:["No choice is marked as correct."])),x(this,"serialize",(()=>m.default.pick(this.props,"choices","randomize","multipleSelect","countChoices","displayCount","hasNoneOfTheAbove","deselectEnabled")))}render(){const t=m.default.reduce(this.props.choices,(function(e,t){return t.correct?e+1:e}),0);return u.createElement("div",null,u.createElement("div",{className:"perseus-widget-row"},u.createElement("a",{href:"https://docs.google.com/document/d/1frZf7yrWVWb1n4tVjqlzqVUiv1pn4cZXbxgP62-JDBY/edit#heading=h.8ng1isya19nu",target:"_blank"},"Multiple choice style guide"),u.createElement("br",null),u.createElement("div",{className:"perseus-widget-left-col"},u.createElement(Nh,{label:"Multiple selections",labelAlignment:"right",multipleSelect:this.props.multipleSelect,onChange:this.onMultipleSelectChange})),u.createElement("div",{className:"perseus-widget-right-col"},u.createElement(Nh,{label:"Randomize order",labelAlignment:"right",randomize:this.props.randomize,onChange:this.props.onChange})),this.props.multipleSelect&&u.createElement("div",{className:"perseus-widget-left-col"},u.createElement(Nh,{label:"Specify number correct",labelAlignment:"right",countChoices:this.props.countChoices,onChange:this.onCountChoicesChange}))),u.createElement(e.BaseRadio,{ref:"baseRadio",multipleSelect:this.props.multipleSelect,countChoices:this.props.countChoices,numCorrect:t,editMode:!0,labelWrap:!1,apiOptions:this.props.apiOptions,choices:this.props.choices.map((function(e,t){return{content:u.createElement(Oh,{ref:"choice-editor".concat(t),apiOptions:this.props.apiOptions,choice:e,onContentChange:e=>{"content"in e&&this.onContentChange(t,e.content)},onClueChange:e=>{"content"in e&&this.onClueChange(t,e.content)},onDelete:this.onDelete.bind(this,t),showDelete:this.props.choices.length>=2}),isNoneOfTheAbove:e.isNoneOfTheAbove,checked:e.correct}}),this),onChange:this.onChange}),u.createElement("div",{className:"add-choice-container"},u.createElement("a",{className:"simple-button orange",href:"#",onClick:this.addChoice.bind(this,!1)},u.createElement(kh,Th)," Add a choice"," "),!this.props.hasNoneOfTheAbove&&u.createElement("a",{className:"simple-button",href:"#",onClick:this.addChoice.bind(this,!0)},u.createElement(kh,Th)," None of the above"," ")))}}x(Mh,"propTypes",{...e.Changeable.propTypes,apiOptions:e.ApiOptions.propTypes,choices:f.default.arrayOf(f.default.shape({content:f.default.string,clue:f.default.string,correct:f.default.bool})),displayCount:f.default.number,randomize:f.default.bool,hasNoneOfTheAbove:f.default.bool,multipleSelect:f.default.bool,countChoices:f.default.bool,deselectEnabled:f.default.bool,static:f.default.bool}),x(Mh,"widgetName","radio"),x(Mh,"defaultProps",{choices:[{},{}],displayCount:null,randomize:!1,hasNoneOfTheAbove:!1,multipleSelect:!1,countChoices:!1,deselectEnabled:!1});const{NumberInput:Ah,TextInput:Ph}=e.components;class Dh extends u.Component{constructor(){var t;super(...arguments),t=this,x(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),x(this,"updateMolecule",(e=>function(t){const n=[...this.props.smiles];n[e]=t,this.change({smiles:n})}.bind(this))),x(this,"updateRotation",(e=>function(t){const n=[...this.props.rotationAngle];n[e]=t,this.change({rotationAngle:n})}.bind(this))),x(this,"updateSeparators",((e,t)=>n=>{const r=this.props.separators.map((e=>({...e})));r[e][t]=n,this.change({separators:r})})),x(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){return u.createElement("div",null,u.createElement("div",null,u.createElement("label",null,"LHS SMILES: ",u.createElement(Ph,{onChange:this.updateMolecule(0),value:this.props.smiles[0]}))),u.createElement("div",null,u.createElement("label",null,"LHS Rotation (deg): ",u.createElement(Ah,{onChange:this.updateRotation(0),value:this.props.rotationAngle[0]}))),u.createElement("div",null,u.createElement("label",null,"RHS SMILES: ",u.createElement(Ph,{onChange:this.updateMolecule(1),value:this.props.smiles[1]}))),u.createElement("div",null,u.createElement("label",null,"RHS Rotation (deg): ",u.createElement(Ah,{onChange:this.updateRotation(1),value:this.props.rotationAngle[1]}))),u.createElement("div",null,u.createElement("label",null,"Top of arrow text: ",u.createElement(Ph,{onChange:this.updateSeparators(0,"topText"),value:this.props.separators[0].topText}))),u.createElement("div",null,u.createElement("label",null,"Bottom of arrow text: ",u.createElement(Ph,{onChange:this.updateSeparators(0,"bottomText"),value:this.props.separators[0].bottomText}))))}}x(Dh,"propTypes",{...e.Changeable.propTypes,rotationAngle:f.default.arrayOf(f.default.number),separators:f.default.arrayOf(f.default.object),smiles:f.default.arrayOf(f.default.string)}),x(Dh,"widgetName","reaction-diagram"),x(Dh,"defaultProps",{smiles:["",""],rotationAngle:[0,0],separators:[{type:"right",topText:"",bottomText:""}]});const{InlineIcon:Ih}=e.components,{iconCircleArrowDown:Rh,iconCircleArrowUp:zh,iconPlus:Lh,iconTrash:Fh}=e.icons;class Uh extends u.Component{render(){return u.createElement("a",{href:"#",className:"step-control-button simple-button simple-button--small orange",onClick:e=>{e.preventDefault(),this.props.onClick()}},u.createElement(Ih,this.props.icon))}}class qh extends u.Component{constructor(){super(...arguments),x(this,"_handleEditorChange",((e,t)=>{const n=m.default.clone(this.props.json);n[e]=m.default.extend({},n[e],t),this.props.onChange({json:n})})),x(this,"serialize",(()=>({json:m.default.times(this.props.json.length,(e=>this.refs["editor"+e].serialize()))}))),x(this,"_handleMoveStepEarlier",(e=>{if(0===e)return;const t=m.default.clone(this.props.json),n=t[e];t.splice(e,1),t.splice(e-1,0,n),this.props.onChange({json:t})})),x(this,"_handleMoveStepLater",(e=>{const t=m.default.clone(this.props.json);if(e+1===t.length)return;const n=t[e];t.splice(e,1),t.splice(e+1,0,n),this.props.onChange({json:t})})),x(this,"_handleAddStepAfter",(e=>{const t=m.default.clone(this.props.json),n=e>=0?{widgets:t[e].widgets}:{};t.splice(e+1,0,n),this.props.onChange({json:t})})),x(this,"_handleRemoveStep",(e=>{const t=m.default.clone(this.props.json);t.splice(e,1),this.props.onChange({json:t})}))}render(){return u.createElement("div",{className:"perseus-sequence-editor"},m.default.map(this.props.json,((e,t)=>u.createElement("div",{key:t},"Step ",t+1,u.createElement("div",{style:{display:"inline-block",float:"right"}},t+1<this.props.json.length&&u.createElement(Uh,{icon:Rh,onClick:()=>{this._handleMoveStepLater(t)}}),t>0&&u.createElement(Uh,{icon:zh,onClick:()=>{this._handleMoveStepEarlier(t)}}),u.createElement(Uh,{icon:Fh,onClick:()=>{confirm("Are you sure you want to remove step "+(t+1)+"?")&&this._handleRemoveStep(t)}}),u.createElement(Uh,{icon:Lh,onClick:()=>{this._handleAddStepAfter(t)}})),u.createElement(Fn,{ref:"editor"+t,apiOptions:this.props.apiOptions,content:e.content,widgets:e.widgets,images:e.images,widgetEnabled:!0,immutableWidgets:!1,onChange:m.default.partial(this._handleEditorChange,t)})))))}}x(qh,"propTypes",{json:f.default.arrayOf(f.default.shape({content:f.default.string,widgets:f.default.objectOf(f.default.any),images:f.default.objectOf(f.default.any)})),apiOptions:e.ApiOptions.propTypes,onChange:f.default.func.isRequired}),x(qh,"widgetName","sequence"),x(qh,"defaultProps",{json:[{content:"",widgets:{},images:{}}]});class Wh extends u.Component{constructor(){super(...arguments),x(this,"focus",(()=>(this.refs.input.focus(),!0))),x(this,"changeValue",(e=>{this.props.onChange(e.target.value)}))}render(){return u.createElement("textarea",{ref:"input",value:this.props.value||"",onChange:this.changeValue})}}class Vh extends u.Component{constructor(){var t;super(...arguments),t=this,x(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),x(this,"focus",(()=>(this.refs.input.focus(),!0))),x(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){return u.createElement("div",null,u.createElement("label",null,u.createElement("div",null,"Simple markdown contents:"),u.createElement("div",null,u.createElement(Wh,{value:this.props.value,onChange:this.change("value"),ref:"input"}))))}}x(Vh,"propTypes",{...e.Changeable.propTypes}),x(Vh,"widgetName","simple-markdown-tester"),x(Vh,"defaultProps",{value:""});const{InfoTip:jh,NumberInput:Bh}=e.components;class $h extends u.Component{constructor(){var t;super(...arguments),t=this,x(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),x(this,"handleTargetValueChange",((e,t)=>{this.change(e,t.target.value)})),x(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){return u.createElement("div",{className:"perseus-widget-simulator"},u.createElement("div",null,w._("X-Axis Label"),":",u.createElement("input",{type:"text",className:"graph-settings-axis-label",value:this.props.xAxisLabel,onChange:m.default.partial(this.handleTargetValueChange,"xAxisLabel")})),u.createElement("div",null,w._("Y-Axis Label"),":",u.createElement("input",{type:"text",className:"graph-settings-axis-label",value:this.props.yAxisLabel,onChange:m.default.partial(this.handleTargetValueChange,"yAxisLabel")})),u.createElement("div",null,w._('"True Proportion" Label'),":",u.createElement("input",{type:"text",className:"graph-settings-axis-label",value:this.props.proportionLabel,onChange:m.default.partial(this.handleTargetValueChange,"proportionLabel")}),u.createElement(jh,null,u.createElement("p",null,'This text will be displayed next to the box in which the user enters the sample proportion for their simulation. For example, if your question is about surveying for approval ratings, you might want this to say "Sample approval rating".'))),u.createElement("div",null,w._("Proportion or Percentage"),":",u.createElement("select",{className:"perseus-widget-dropdown",value:this.props.proportionOrPercentage,onChange:m.default.partial(this.handleTargetValueChange,"proportionOrPercentage")},u.createElement("option",{key:"proportion",value:"proportion"},"Proportion"),u.createElement("option",{key:"percentage",value:"percentage"},"Percentage")),u.createElement(jh,null,u.createElement("p",null,"Do you want the user to describe their simulation in terms of a proportion or a percentage?"))),u.createElement("div",null,w._("Number of trials"),":",u.createElement(Bh,{value:this.props.numTrials,checkValidity:e=>e>=0&&e<=5e3,onChange:this.change("numTrials")}),u.createElement(jh,null,u.createElement("p",null,"This controls the number of trials used in the simulation. For example, if you set this to 50, then the survey will be conducted 50 times. Warning: setting this too high (i.e., greater than 5000 or so) will freeze the page."))))}}x($h,"propTypes",{...e.Changeable.propTypes,xAxisLabel:f.default.string,yAxisLabel:f.default.string,numTrials:f.default.number,proportionLabel:f.default.string,proportionOrPercentage:f.default.string}),x($h,"widgetName","simulator"),x($h,"defaultProps",{xAxisLabel:"Proportion (%)",yAxisLabel:"Number of times seen",numTrials:100,proportionLabel:"Underlying proportion",proportionOrPercentage:"proportion"});const{InfoTip:Hh,PropCheckBox:Gh,TextListEditor:Yh}=e.components;class Kh extends u.Component{constructor(){super(...arguments),x(this,"onLayoutChange",(e=>{this.props.onChange({layout:e.target.value})})),x(this,"serialize",(()=>m.default.pick(this.props,"correct","layout","padding")))}render(){const e=this;return u.createElement("div",null,u.createElement("div",null," ","Correct answer:"," ",u.createElement(Hh,null,u.createElement("p",null,"Enter the correct answer (in the correct order) here. The preview on the right will have the cards in a randomized order, which is how the student will see them."))),u.createElement(Yh,{options:this.props.correct,onChange:function(t,n){e.props.onChange({correct:t},n)},layout:this.props.layout}),u.createElement("div",null,u.createElement("label",null," ","Layout:"," ",u.createElement("select",{value:this.props.layout,onChange:this.onLayoutChange},u.createElement("option",{value:"horizontal"},"Horizontal"),u.createElement("option",{value:"vertical"},"Vertical"))),u.createElement(Hh,null,u.createElement("p",null,"Use the horizontal layout for short text and small images. The vertical layout is best for longer text and larger images."))),u.createElement("div",null,u.createElement(Gh,{label:"Padding:",padding:this.props.padding,onChange:this.props.onChange}),u.createElement(Hh,null,u.createElement("p",null,"Padding is good for text, but not needed for images."))))}}x(Kh,"propTypes",{correct:f.default.array,layout:f.default.oneOf(["horizontal","vertical"]),padding:f.default.bool}),x(Kh,"widgetName","sorter"),x(Kh,"defaultProps",{correct:["$x$","$y$","$z$"],layout:"horizontal",padding:!0});const{InfoTip:Jh,NumberInput:Xh}=e.components,Zh=e.TableWidget.widget;class Qh extends u.Component{constructor(){super(...arguments),x(this,"focus",(()=>{b.default.findDOMNode(this.refs.numberOfColumns).focus()})),x(this,"onSizeInput",((t,n)=>{let r=+t||0,s=+n||0;r=Math.min(Math.max(1,r),30),s=Math.min(Math.max(1,s),6);const a=this.props.columns,i=this.props.rows,o=this.props.answers;function l(e){s<=a?e.length=s:m.default(s-a).times((function(){e.push("")}))}r<=i?o.length=r:m.default(r-i).times((function(){o.push(e.Util.stringArrayOfSize(a))}));const c=this.props.headers;l(c),m.default.each(o,l),this.props.onChange({rows:r,columns:s,answers:o,headers:c})})),x(this,"serialize",(()=>{const e=m.default.pick(this.props,"headers","rows","columns");return m.default.extend({},e,{answers:m.default.map(this.props.answers,m.default.clone)})}))}render(){const e=m.default.pick(this.props,"headers","answers","onChange","apiOptions");return m.default.extend(e,{editableHeaders:!0,Editor:Fn,onFocus:()=>{},onBlur:()=>{},trackInteraction:()=>{}}),u.createElement("div",null,u.createElement("div",{className:"perseus-widget-row"},u.createElement("label",null,"Number of columns:"," ",u.createElement(Xh,{ref:"numberOfColumns",value:this.props.columns,onChange:e=>{e&&this.onSizeInput(this.props.rows,e)},useArrowKeys:!0}))),u.createElement("div",{className:"perseus-widget-row"},u.createElement("label",null,"Number of rows:"," ",u.createElement(Xh,{ref:"numberOfRows",value:this.props.rows,onChange:e=>{e&&this.onSizeInput(e,this.props.columns)},useArrowKeys:!0}))),u.createElement("div",null," ","Table of answers:"," ",u.createElement(Jh,null,u.createElement("p",null,"The student has to fill out all cells in the table. For partially filled tables create a table using the template, and insert text input boxes as desired."))),u.createElement("div",null,u.createElement(Zh,e)))}}x(Qh,"propTypes",{rows:f.default.number,columns:f.default.number,headers:f.default.arrayOf(f.default.string),answers:f.default.arrayOf(f.default.arrayOf(f.default.string))}),x(Qh,"widgetName","table"),x(Qh,"defaultProps",{headers:[""],rows:4,columns:1,answers:m.default(4).times((function(){return e.Util.stringArrayOfSize(1)}))});const{Graph:eu,InfoTip:tu,PropCheckBox:nu}=e.components,ru=e.TransformerWidget.widget,{deepEq:su,getGridStep:au}=e.Util;const iu={url:null};function ou(e,t){return e=m.default.clone(e).sort($a.compare),t=m.default.clone(t).sort($a.compare),m.default.all(m.default.map(e,(function(e,n){const r=t[n];return $a.equal(e,r)})))}const lu={apiOptions:e.ApiOptions.defaults,gradeEmpty:!1,graphMode:"interactive",listMode:"dynamic",graph:{},tools:{translation:{enabled:!0,required:!1,constraints:{}},rotation:{enabled:!0,required:!1,constraints:{fixed:!1},coord:[1,6]},reflection:{enabled:!0,required:!1,constraints:{fixed:!1},coords:[[2,-4],[2,2]]},dilation:{enabled:!0,required:!1,constraints:{fixed:!1},coord:[6,6]}},drawSolutionShape:!0,starting:{shape:{type:"polygon-3",coords:[[2,2],[2,6],[7,2]]},transformations:[]},correct:{shape:{type:"polygon-3",coords:[[2,2],[2,6],[7,2]]},transformations:[]}};class cu extends u.Component{constructor(){super(...arguments),x(this,"changeConstraints",(e=>{const t=m.default.extend({},this.props.constraints,e);this.props.onChange({constraints:t})}))}render(){return u.createElement("div",null,this.props.name,":"," ",u.createElement(nu,{label:"enabled:",enabled:this.props.settings.enabled,onChange:this.props.onChange})," ",this.props.settings.enabled&&u.createElement(nu,{label:"required:",required:this.props.settings.required,onChange:this.props.onChange}),this.props.settings.enabled&&u.createElement(tu,null,"'Required' will only grade the answer as correct if the student has used at least one such transformation.")," ",this.props.allowFixed&&this.props.settings.enabled&&u.createElement(nu,{label:"fixed:",fixed:this.props.settings.constraints.fixed,onChange:this.changeConstraints}),this.props.allowFixed&&this.props.settings.enabled&&u.createElement(tu,null,"Enable 'fixed' to prevent the student from repositioning the tool. The tool will appear in the position at which it is placed in the editor below."))}}x(cu,"defaultProps",{allowFixed:!0});class pu extends u.Component{constructor(){super(...arguments),x(this,"getMode",(()=>this.props.graphMode+","+this.props.listMode)),x(this,"changeMode",(e=>{const t=e.target.value.split(",");this.props.onChange({graphMode:t[0],listMode:t[1]})})),x(this,"changeHandlerFor",(e=>t=>{const n=m.default.clone(this.props.tools);n[e]=m.default.extend({},this.props.tools[e],t),this.props.onChange({tools:n})}))}render(){return u.createElement("div",{className:"transformer-settings"},u.createElement("div",null," ","Mode:"," ",u.createElement("select",{value:this.getMode(),onChange:this.changeMode},u.createElement("option",{value:"interactive,dynamic"}," ","Exploration with text"," "),u.createElement("option",{value:"interactive,static"}," ","Exploration without text"," "),u.createElement("option",{value:"dynamic,interactive"}," ","Formal with movement"," "),u.createElement("option",{value:"static,interactive"}," ","Formal without movement"," ")),u.createElement(tu,null,u.createElement("ul",null,u.createElement("li",null,u.createElement("b",null,"Exploration:")," Students create transformations with tools on the graph."," "),u.createElement("li",null,u.createElement("b",null,"Formal with movement:")," Students specify transformations mathematically in the transformation list. Graph shows the results of these transformations."," "),u.createElement("li",null,u.createElement("b",null,"Formal without movement:")," Students specify transformations mathematically in the transformation list. Graph does not update."," ")))),u.createElement(cu,{name:"Translations",settings:this.props.tools.translation,allowFixed:!1,onChange:this.changeHandlerFor("translation")}),u.createElement(cu,{name:"Rotations",settings:this.props.tools.rotation,onChange:this.changeHandlerFor("rotation")}),u.createElement(cu,{name:"Reflections",settings:this.props.tools.reflection,onChange:this.changeHandlerFor("reflection")}),u.createElement(cu,{name:"Dilations",settings:this.props.tools.dilation,onChange:this.changeHandlerFor("dilation")}),u.createElement(nu,{label:"Draw Solution:",drawSolutionShape:this.props.drawSolutionShape,onChange:this.props.onChange}))}}const hu={getPointCountForType:function(e){const t=e.split("-");return"polygon"===t[0]?t[1]||3:"line"===t[0]||"lineSegment"===t[0]?2:"angle"===t[0]?3:"circle"===t[0]?2:"point"===t[0]?1:void 0},addMovableShape:function(t,n){if(n.editable&&n.translatable)throw new e.PerseusError("It doesn't make sense to have a movable shape where you can stretch the points and translate them simultaneously.",e.Errors.InvalidInput,{metadata:{options:n}});const r=m.default.map(n.shape.coords,(function(e){let a=!1,i=e;const o=t.addMovablePoint({coord:e,normalStyle:n.normalPointStyle,highlightStyle:n.highlightPointStyle,constraints:{fixed:!n.translatable&&!n.editable},visible:n.showPoints,snapX:n.snap&&n.snap[0]||0,snapY:n.snap&&n.snap[1]||0,bounded:!1,onMove:function(e,t){a||(i=o.coord,a=!0);let l=Oa.subtract([e,t],o.coord);n.onMove&&(l=n.onMove(l[0],l[1])),n.translatable&&m.default.each(r,(function(e){e!==o&&e.setCoord(Oa.add(e.coord,l))}));const c=o.coord,p=Oa.add(o.coord,l);return o.coord=p,s.update(),o.coord=c,p},onMoveEnd:function(){if(n.onMoveEnd&&a){a=!1;const e=Oa.subtract(o.coord,i);n.onMoveEnd(e[0],e[1])}s.update()}});return o.bounded=!0,o})),s=hu.addShape(t,n,r),a=s.remove;return s.remove=function(){a.apply(s),m.default.invoke(r,"remove")},s},addShape:function(e,t,n){n=n||t.shape.coords;const r=hu._typesOf(t.shape),s=t.shape.options||hu.defaultOptions(r),a=hu._mapTypes(r,n,(function(n,r,a){const i=m.default.extend({},t,s[a]);return hu._addType(e,n,r,i)})),i=m.default.filter(m.default.pluck(a,"update"),m.default.identity),o=m.default.filter(m.default.pluck(a,"remove"),m.default.identity),l=function(){return m.default.map(a,(function(e){return e.getOptions?e.getOptions():{}}))};return{type:r,points:n,update:function(){m.default.invoke(i,"call")},remove:function(){m.default.invoke(o,"call")},toJSON:function(){const e=m.default.map(n,(function(e){return m.default.isArray(e)?e:e.coord}));return{type:r,coords:e,options:l()}},getOptions:l}},equal:function(e,t){const n=hu._typesOf(e),r=hu._typesOf(t);if(n.length!==r.length)return!1;const s=hu._mapTypes(n,e.coords,hu._combine),a=hu._mapTypes(r,t.coords,hu._combine);return m.default.all(m.default.map(s,(function(e,t){const n=a[t];return e.type===n.type&&hu._forType(e.type).equal(e.coords,n.coords)})))},_typesOf:function(e){let t=e.type;return m.default.isArray(t)||(t=[t]),m.default.map(t,(function(e){return"polygon"===e?"polygon-3":e}))},defaultOptions:function(e){return m.default.map(e,(function(e){const t=hu._forType(e).defaultOptions;return m.default.extend({},t)}))},_forType:function(e){const t=e.split("-")[0];return hu[t]},_mapTypes:function(e,t,n,r){return m.default.map(e,(function(e,s){const a=hu.getPointCountForType(e),i=m.default.first(t,a);return t=m.default.rest(t,a),n.call(r,e,i,s)}))},_addType:function(t,n,r,s){const a=m.default.isArray(r[0])?{coordA:r[0],coordZ:r[1]}:{pointA:r[0],pointZ:r[1]};if("polygon"===(n=n.split("-")[0])){const e=t.addMovablePolygon(m.default.extend({},s,{fixed:!s.editable,snapX:s.snap&&s.snap[0]||0,snapY:s.snap&&s.snap[1]||0,points:r,constrainToGraph:!1}));return{update:e.transform.bind(e),remove:e.remove.bind(e)}}if("line"===n||"lineSegment"===n){const e=t.addMovableLineSegment(m.default.extend({},s,a,{movePointsWithLine:!0,fixed:!0,constraints:{fixed:!0},extendLine:"line"===n}));return{update:e.transform.bind(e,!0),remove:e.remove.bind(e)}}if("angle"===n){const e=!!s.editable&&null,n=t.addMovableAngle({angleLabel:"$deg0",fixed:!0,points:r,normalStyle:s.normalStyle,reflex:s.reflex});return m.default.isArray(r[0])||s.editable||(r[0].remove(),r[2].remove()),{update:n.update.bind(n,e),remove:n.remove.bind(n),getOptions:function(){return{reflex:n.isReflex()}}}}if("circle"===n){let n={remove:m.default.identity};const a=function(){const a=r[0].coord||r[0],i=r[1].coord||r[1],o=$a.distanceToPoint(a,i);n.remove(),n=t.circle(a,o,m.default.extend({stroke:e.KhanColors.DYNAMIC,"stroke-width":2},s.normalStyle))};return a(),r[1].remove&&!s.editable&&r[1].remove(),{update:a,remove:function(){n.remove()}}}if("point"===n)return{update:null,remove:null};throw new e.PerseusError("Invalid shape type "+n,e.Errors.InvalidInput)},_combine:function(e,t){return{type:e,coords:t}},polygon:{equal:ou},line:{equal:Ha.equal},lineSegment:{equal:ou},angle:{equal:function(e,t){if(!$a.equal(e[1],t[1]))return!1;const n=[e[1],e[0]],r=[e[1],e[2]],s=[t[1],t[0]],a=[t[1],t[2]],i=Ga.equal(n,s)&&Ga.equal(r,a),o=Ga.equal(n,a)&&Ga.equal(r,s);return i||o},defaultOptions:{reflex:!1}},circle:{equal:function(e,t){const n=$a.distanceToPoint(e[0],e[1]),r=$a.distanceToPoint(t[0],t[1]);return $a.equal(e[0],t[0])&&ra.equal(n,r)}},point:{equal:$a.equal}};class uu extends u.Component{constructor(){super(...arguments),x(this,"getTypeString",(e=>m.default.isArray(e)?m.default.map(e,this.getTypeString).join(","):"polygon"===e?"polygon-"+this.props.shape.coords.length:e)),x(this,"changeType",(e=>{const t=String(e.target.value).split(","),n=(r=m.default.map(t,hu.getPointCountForType),m.default.reduce(r,(function(e,t){return e+t}),0));var r;const s=function(e,t){const n=t[0][1]-t[0][0],r=t[1][1]-t[1][0];return e*Math.max(n,r)/20}(4,this.refs.graph.props.range),a=180*(.5-1/n),i=m.default.times(n,(function(e){return $a.rotateDeg([s,0],360*e/n+a)}));this.props.onChange({shape:{type:t,coords:i,options:hu.defaultOptions(t)}})})),x(this,"updateCoords",(()=>{this.props.onChange({shape:this.shape.toJSON()})})),x(this,"setupGraphie",(e=>{this.shape=hu.addMovableShape(e,{editable:!0,snap:e.snap,shape:this.props.shape,onMoveEnd:this.updateCoords})}))}render(){return u.createElement("div",null,u.createElement(eu,{ref:"graph",box:this.props.graph.box,range:this.props.graph.range,labels:this.props.graph.labels,step:this.props.graph.step,gridStep:this.props.graph.gridStep,markings:this.props.graph.markings,backgroundImage:this.props.graph.backgroundImage,onGraphieUpdated:this.setupGraphie}),u.createElement("select",{key:"type-select",value:this.getTypeString(this.props.shape.type),onChange:this.changeType},u.createElement("option",{value:"polygon-3"},"Triangle"),u.createElement("option",{value:"polygon-4"},"Quadrilateral"),u.createElement("option",{value:"polygon-5"},"Pentagon"),u.createElement("option",{value:"polygon-6"},"Hexagon"),u.createElement("option",{value:"line"},"Line"),u.createElement("option",{value:"line,line"},"2 lines"),u.createElement("option",{value:"lineSegment"},"Line segment"),u.createElement("option",{value:"lineSegment,lineSegment"}," ","2 line segments"," "),u.createElement("option",{value:"angle"},"Angle"),u.createElement("option",{value:"circle"},"Circle")))}componentDidMount(){this.setupGraphie(this.refs.graph.graphie())}componentDidUpdate(e){su(e.shape,this.props.shape)||this.refs.graph.reset()}}class du extends u.Component{constructor(){super(...arguments),x(this,"changeGraph",((e,t)=>{const n=m.default.extend({},this.props.graph,e);this.props.onChange({graph:n},t)})),x(this,"changeStarting",(e=>{const t=m.default.extend({},this.props.starting,e);this.props.onChange({starting:t})})),x(this,"changeTransformer",((e,t)=>{e.transformations&&(e.correct={...this.props.correct,transformations:e.transformations},delete e.transformations),this.props.onChange(e,t)})),x(this,"serialize",(()=>{const e=this.refs.explorer.getEditorJSON();return e.correct=e.answer,delete e.answer,e}))}render(){const e=m.default.extend(function(e,t){const n=(e=e||{}).labels||["x","y"],r=e.range||[[-10,10],[-10,10]],s=e.step||[1,1];return{box:[t,t],labels:n,range:r,step:s,gridStep:e.gridStep||au(r,s,t),valid:!0,backgroundImage:iu,markings:"grid",showProtractor:!1}}(this.props.graph,340),this.props.graph);return u.createElement("div",null,u.createElement("div",null,u.createElement(nu,{label:"Grade empty answers as wrong:",gradeEmpty:this.props.gradeEmpty,onChange:this.props.onChange}),u.createElement(tu,null,u.createElement("p",null,"We generally do not grade empty answers. This usually works well, but sometimes can result in giving away part of an answer in a multi-part question."),u.createElement("p",null,"If this is a multi-part question (there is another widget), you probably want to enable this option. Otherwise, you should leave it disabled."),u.createElement("p",null,"Confused? Talk to Elizabeth."))),u.createElement("div",null,"Graph settings:"),u.createElement(lo,{box:e.box,labels:e.labels,range:e.range,step:e.step,gridStep:e.gridStep,valid:e.valid,backgroundImage:e.backgroundImage,markings:e.markings,showProtractor:e.showProtractor,onChange:this.changeGraph}),u.createElement("div",null,"Transformation settings:"),u.createElement(pu,{ref:"transformationSettings",graphMode:this.props.graphMode,listMode:this.props.listMode,tools:this.props.tools,drawSolutionShape:this.props.drawSolutionShape,onChange:this.props.onChange}),u.createElement("div",null,"Starting location:"),u.createElement(uu,{ref:"shapeEditor",graph:e,shape:this.props.starting.shape,onChange:this.changeStarting,setDrawingAreaAvailable:this.props.apiOptions.setDrawingAreaAvailable}),u.createElement("div",null,"Solution transformations:"),u.createElement(ru,{ref:"explorer",graph:e,graphMode:this.props.graphMode,listMode:this.props.listMode,gradeEmpty:this.props.gradeEmpty,tools:this.props.tools,drawSolutionShape:this.props.drawSolutionShape,starting:this.props.starting,correct:this.props.starting,transformations:this.props.correct.transformations,onChange:this.changeTransformer,trackInteraction:()=>{}}))}}x(du,"defaultProps",lu),x(du,"widgetName","transformer");const{InlineIcon:mu,NumberInput:fu}=e.components,{iconOk:gu,iconRemove:vu}=e.icons,yu=function(e){return e.simplify().asMul().partition()[1].flatten().simplify()};class bu extends u.Component{constructor(){super(...arguments),x(this,"_checkValidity",(t=>{let{name:n,original:r,sigfigs:s}=t;const a=Oi(n);let i="",o=!0;if(a.parsed&&r){const t=new Ei("x"),{unit:n}=a,l=new vi(r,"=",new ui(t,n));try{i=function(t,n){return e.displaySigFigs(t,n,-10,!1)}(l.solveLinearEquationForVariable(t).eval(),s),o=function(e,t,n){var r={form:!1,simplify:!1};n=void 0!==n?m.default.extend(r,n):r;var s,a=e.sameVars(t);return a.equal?e.compare(t)?n.form&&!e.sameForm(t)?{equal:!1,message:"Your answer is not in the correct form."}:n.simplify&&!e.isSimplified()?{equal:!1,message:"Your answer is not fully expanded and simplified."}:{equal:!0,message:null}:{equal:!1,message:null}:(s=a.equalIgnoringCase?"Check your variables; one or more are using the wrong case (upper or lower).":"Check your variables; you may have used the wrong letter for one or more of them.",{equal:!1,wrongVariableCase:a.equalIgnoringCase,wrongVariableNames:!a.equalIgnoringCase,message:s})}(yu(r),yu(n)).equal}catch(e){o=!1}}else o=!1;this.setState({valid:o,solvedExample:i})}))}UNSAFE_componentWillMount(){this._checkValidity(this.props)}UNSAFE_componentWillReceiveProps(e){this._checkValidity(e)}render(){let e;return e=this.state.valid?u.createElement("span",null,u.createElement("span",{className:"unit-example-okay"},u.createElement(mu,gu)),this.state.solvedExample):u.createElement("span",{className:"unit-example-not-okay"},u.createElement(mu,vu)),u.createElement("div",null,e," ",this.props.name)}}class Eu extends u.Component{constructor(t){var n;super(t),n=this,x(this,"parsed",void 0),x(this,"groupId",void 0),x(this,"original",void 0),x(this,"change",(function(){for(var t=arguments.length,r=new Array(t),s=0;s<t;s++)r[s]=arguments[s];return e.Changeable.change.apply(n,r)})),x(this,"handleAcceptingUnitsChange",(e=>{const t=e.target.value.split(",").map((e=>e.trim())).filter((e=>""!==e));this.change({acceptingUnits:t})})),x(this,"handleSigfigChange",(e=>{this.change({sigfigs:e})})),x(this,"_checkSigfigValidity",(e=>e>0&&e<=10)),x(this,"_setAccepting",(e=>{this.change({accepting:e})})),x(this,"_doOriginal",(e=>{const t=Oi(e.value);this.parsed=!1,t.parsed&&"unitMagnitude"===t.type&&(this.original=t.expr,this.parsed=!0)})),x(this,"onChange",(e=>{this.props.onChange({value:e.target.value})})),x(this,"getSaveWarnings",(()=>{const{value:e,accepting:t,acceptingUnits:n}=this.props,r=[];return Oi(e).parsed||r.push("Answer did not parse"),"some"===t&&0===n.length&&r.push("There are no accepted units"),r})),x(this,"serialize",(()=>e.EditorJsonify.serialize.call(this))),this.groupId=m.default.uniqueId("accepting"),this._doOriginal(t)}UNSAFE_componentWillReceiveProps(e){this._doOriginal(e)}render(){const{acceptingUnits:e=[],accepting:t}=this.props;let n=null;if("some"===t){const t=e.map(((e,t)=>u.createElement(bu,{name:e,original:this.original||null,sigfigs:this.props.sigfigs,key:t})));n=u.createElement("div",null,u.createElement("input",{type:"text",defaultValue:e.join(", "),onChange:this.handleAcceptingUnitsChange})," ","(comma-separated)",t)}return u.createElement("div",{className:"unit-editor"},u.createElement("div",null,u.createElement("input",{value:this.props.value,className:"unit-editor-canonical",onChange:this.onChange})," ",this.parsed?u.createElement("span",{className:"unit-example-okay"},u.createElement(mu,gu)):u.createElement("span",{className:"unit-example-not-okay"},u.createElement(mu,vu))),u.createElement("div",null,"Significant Figures:"," ",u.createElement(fu,{value:this.props.sigfigs,onChange:this.handleSigfigChange,checkValidity:this._checkSigfigValidity,useArrowKeys:!0})),u.createElement("div",null,u.createElement("label",null,u.createElement("input",{type:"radio",name:this.groupId,onChange:()=>this._setAccepting("all"),checked:"all"===this.props.accepting})," Any equivalent unit "),u.createElement("label",null,u.createElement("input",{type:"radio",name:this.groupId,onChange:()=>this._setAccepting("some"),checked:"some"===this.props.accepting})," Only these units ")),n)}}x(Eu,"propTypes",{...e.Changeable.propTypes,value:f.default.string,acceptingUnits:f.default.arrayOf(f.default.string),accepting:f.default.oneOf(["all","some"]),sigfigs:f.default.number}),x(Eu,"widgetName","unit-input"),x(Eu,"defaultProps",{value:"5x10^5 kg m / s^2",accepting:"all",sigfigs:3});const{InfoTip:wu}=e.components,xu=/khanacademy\.org\/.*\/v\/(.*)$/;function Cu(e){const t=xu.exec(e);return t?t[1]:e}class Su extends u.Component{constructor(){var t;super(...arguments),t=this,x(this,"_handleUrlChange",(e=>{this.props.onChange({location:Cu(e)})})),x(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),x(this,"serialize",(()=>e.EditorJsonify.serialize.call(this)))}render(){return u.createElement("div",null,u.createElement("label",null,"KA Video Slug:"," ",u.createElement(zs,{value:this.props.location,style:{width:290},onChange:this._handleUrlChange}),u.createElement(wu,null,"KA video URLs will be converted to just the slug.")))}}x(Su,"propTypes",{...e.Changeable.propTypes,location:f.default.string,onChange:f.default.func}),x(Su,"widgetName","video"),x(Su,"defaultProps",{location:""});var ku=[Rs,Vs,Bs,Ks,Qa,ei,ni,Hi,Zi,eo,wo,xo,No,Io,Lo,tl,ll,cp,xp,Np,Op,Rp,Fp,Bp,rh,ih,ch,dh,mh,Sh,Dh,qh,Vh,$h,Kh,Qh,du,Eu,Su,Mh];class Nu extends u.Component{constructor(){super(...arguments),x(this,"focus",(()=>(this.refs.input.focus(),!0))),x(this,"changeValue",(e=>{this.props.onChange(e.target.value)}))}render(){return u.createElement("input",{ref:"input",value:this.props.value||"",onChange:this.changeValue})}}class Tu extends u.Component{constructor(){var t;super(...arguments),t=this,x(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),x(this,"getUserInput",(()=>this.props.value)),x(this,"focus",(()=>(this.refs.input.focus(),!0))),x(this,"simpleValidate",(e=>Tu.validate(this.getUserInput(),e)))}static validate(e,t){return""===e?{type:"invalid",message:"It looks like you haven't answered all of the question yet."}:e===t.correct?{type:"points",earned:1,total:1,message:null}:{type:"points",earned:0,total:1,message:null}}render(){return u.createElement(Nu,{ref:"input",value:this.props.value,onChange:this.change("value")})}}x(Tu,"propTypes",{...e.Changeable.propTypes,value:f.default.string}),x(Tu,"defaultProps",{value:""});var _u={name:"example-widget",displayName:"Example Widget",defaultAlignment:"inline-block",hidden:!0,widget:Tu};const Ou=e.PerseusMarkdown.parse,Mu=e.PerseusMarkdown.basicOutput;class Au extends u.Component{constructor(){var t;super(...arguments),t=this,x(this,"change",(function(){for(var n=arguments.length,r=new Array(n),s=0;s<n;s++)r[s]=arguments[s];return e.Changeable.change.apply(t,r)})),x(this,"toJSON",(()=>({}))),x(this,"focus",(()=>(this.refs.input.focus(),!0))),x(this,"simpleValidate",(e=>Au.validate(this.toJSON(),e)))}static validate(e,t){return{type:"points",earned:0,total:0,message:null}}render(){const e=Ou(this.props.value),t=Mu(e);return u.createElement("div",null,t)}}x(Au,"propTypes",{...e.Changeable.propTypes,value:f.default.string}),x(Au,"defaultProps",{value:""});var Pu=[Xa,_u,{name:"simple-markdown-tester",displayName:"Simple Markdown Tester",hidden:!0,widget:Au,transform:m.default.identity}],Du=[...e.widgets,...Pu];e.Widgets.registerEditors(ku),e.Widgets.registerWidgets(Du),exports.AllEditors=ku,exports.AllWidgets=Du,exports.ArticleDiff=Nr,exports.ArticleEditor=Kn,exports.DeviceFramer=k,exports.Editor=Fn,exports.EditorPage=Gr,exports.IframeContentRenderer=Vn,exports.ItemDiff=_r,exports.MultiRendererEditor=Ts,exports.StatefulArticleEditor=Os,exports.StatefulEditorPage=As,exports.StructuredItemDiff=Pr,exports.ViewportResizer=nr,exports.i18n=ts;
|
|
10
10
|
//# sourceMappingURL=index.js.map
|