@khanacademy/perseus-editor 0.1.3 → 0.2.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 +11 -0
- package/dist/es/index.js +2 -2
- package/dist/es/index.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +14 -6
- package/src/article-editor.jsx +3 -2
- package/src/editor-page.jsx +5 -2
- package/src/hint-editor.jsx +6 -4
- package/src/iframe-content-renderer.jsx +49 -67
- package/src/item-editor.jsx +3 -2
package/dist/index.js
CHANGED
|
@@ -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
|
+
*/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)}))}));class jn extends d.Component{constructor(){super(...arguments),C(this,"_frame",void 0),C(this,"_isMounted",void 0),C(this,"_lastData",void 0),C(this,"_lastHeight",void 0),C(this,"iframeID",void 0)}componentDidMount(){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(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(){Wn[this.iframeID]=null,Vn[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 d.createElement("div",{ref:"container",style:{width:"100%",height:"100%"}})}}const{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,datasetKey:"mobile",datasetValue:n,seamless:t,url:this.props.previewURL}))}_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",datasetKey:"mobile",datasetValue:e,seamless:!0,url:this.props.previewURL}))))}}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,highlightLint:this.props.highlightLint,previewURL:this.props.previewURL,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,datasetKey:"mobile",datasetValue:e,seamless:!0,url:this.props.previewURL})),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,previewURL:this.props.previewURL}),(!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,previewURL:this.props.previewURL,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;
|
|
10
10
|
//# sourceMappingURL=index.js.map
|